2012-12-06 11 views
5

मेरा पहला प्रश्न यहां :)स्केपर के साथ किसी वेबपृष्ठ के सभी लिंक क्रॉल करने का प्रयास कर रहा है। लेकिन मैं किसी पृष्ठ पर लिंक आउटपुट नहीं कर सकता

मैं अपने स्कूल की वेबसाइट को सभी संभावित वेबपृष्ठों के लिए क्रॉल करने की कोशिश कर रहा था। लेकिन मुझे एक टेक्स्ट फ़ाइल में लिंक नहीं मिल सकते हैं। मेरे पास सही अनुमतियां हैं, इसलिए यह समस्या नहीं है।

from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.selector import HtmlXPathSelector 
from scrapy.item import Item 
from scrapy.spider import BaseSpider 

class hsleidenSpider(CrawlSpider): 
     name = "hsleiden1" 
     allowed_domains = ["hsleiden.nl"] 
     start_urls = ["http://hsleiden.nl"] 

     # allow=() is used to match all links 
     rules = [ 
     Rule(SgmlLinkExtractor(allow=()), follow=True), 
     Rule(SgmlLinkExtractor(allow=()), callback='parse_item') 
     ] 

     def parse_item(self, response): 
       x = HtmlXPathSelector(response) 

       filename = "hsleiden-output.txt" 
       open(filename, 'ab').write(response.url) 

तो मैं केवल hsleiden.nl पृष्ठ पर स्कैनिंग कर रहा हूं। और मैं textfile hsleiden-output.txt में respond.url करना चाहता हूं।

क्या यह अधिकार करने का कोई तरीका है?

+0

कृपया अपनी समस्या के बारे में विशिष्ट रहें। आप क्या होने की उम्मीद करते हैं? इसके बजाय क्या हो रहा है? – Sheena

+0

अगर मैं आपका कोड उधार लेना चाहता था, तो मैं इसे कैसे कॉल करूं? –

उत्तर

1

CrawlSpider के लिए प्रलेखन के संदर्भ में, यदि एकाधिक नियम एक ही लिंक से मेल खाते हैं तो केवल पहले का उपयोग किया जाएगा।

इस प्रकार, रीडायरेक्ट के परिणामस्वरूप, पहले नियमों का उपयोग एक प्रतीत होता है अनंत लूप में। चूंकि दूसरे नियम को अनदेखा कर दिया गया है, इसलिए मिलान करने वाले लिंक कभी भी parse_item कॉलबैक में पास नहीं किए जाते हैं, जिसका अर्थ है आउटपुट फ़ाइल नहीं।

कुछ जांच रीडायरेक्ट मुद्दे को ठीक करने के लिए (और इतना है कि यह दूसरे के साथ संघर्ष नहीं करता है पहला नियम संशोधित करने के लिए) की आवश्यकता है, लेकिन यह पूरी तरह से टिप्पणी तो की तरह लिंक का कोई आउटपुट फ़ाइल का उत्पादन करेगा:

http://www.hsleiden.nl/activiteitenkalenderhttp://www.hsleiden.nlhttp://www.hsleiden.nl/vind-je-studie/proefstuderenhttp://www.hsleiden.nl/studiumgenerale

आदि

वे सभी एक ही लाइन पर एक साथ munged गया है, तो आप एक नई पंक्ति वर्ण या विभाजक हर बार जब आप आउटपुट फ़ाइल को लिखने जोड़ सकते हैं।

+0

Thx दोस्त, मेरे लिए काम करता है। आउटपुट पर आपका समाधान '\ n' भी तय किया गया है। –

संबंधित मुद्दे