2012-01-10 12 views
12

मैं साइट पर एकाधिक पृष्ठों को क्रॉल करने के लिए स्केपर का उपयोग कर रहा हूं। परिवर्तनीय start_urls पृष्ठों को क्रॉल करने के लिए परिभाषित करने के लिए उपयोग किया जाता है। मैं शुरू में, 1 पृष्ठ के साथ शुरू होता है इस प्रकार 1 पेज से अधिक जानकारी प्राप्त करने के बाद फ़ाइल example_spider.pyस्केपर में गतिशील start_urls

में start_urls = [1st page] को परिभाषित करने, मैं निर्धारित करेंगे कि आगे क्या पृष्ठों क्रॉल करने की कर रहे हैं, फिर उसके अनुसार start_urls आवंटित होगा। इसलिए, मुझे start_urls = [1st page, 2nd page, ..., Kth page] में परिवर्तनों के साथ example_spider.py के ऊपर ओवरराइट करना होगा, फिर स्केपर को फिर से क्रॉल करें।

क्या यह सबसे अच्छा तरीका है या क्या start_urls गतिशील रूप से example_splider.py को ओवरराइट किए बिना स्केपर एपीआई का उपयोग करके असाइन करने का एक बेहतर तरीका है? धन्यवाद।

उत्तर

21

start_urls कक्षा विशेषता में यूआरएल शुरू होता है - और कुछ भी नहीं।

class Spider(BaseSpider): 

    name = 'my_spider' 
    start_urls = [ 
       'http://www.domain.com/' 
    ] 
    allowed_domains = ['domain.com'] 

    def parse(self, response): 
     '''Parse main page and extract categories links.''' 
     hxs = HtmlXPathSelector(response) 
     urls = hxs.select("//*[@id='tSubmenuContent']/a[position()>1]/@href").extract() 
     for url in urls: 
      url = urlparse.urljoin(response.url, url) 
      self.log('Found category url: %s' % url) 
      yield Request(url, callback = self.parseCategory) 

    def parseCategory(self, response): 
     '''Parse category page and extract links of the items.''' 
     hxs = HtmlXPathSelector(response) 
     links = hxs.select("//*[@id='_list']//td[@class='tListDesc']/a/@href").extract() 
     for link in links: 
      itemLink = urlparse.urljoin(response.url, link) 
      self.log('Found item link: %s' % itemLink, log.DEBUG) 
      yield Request(itemLink, callback = self.parseItem) 

    def parseItem(self, response): 
     ... 

आप अभी भी शुरू सृजन का अनुरोध करता है अनुकूलित करने के लिए चाहते हैं, ओवरराइड विधि BaseSpider.start_requests()

+0

है: के साथ [एक और] कॉलबैक parse कॉलबैक इसी अनुरोध से उपज - आप अन्य पृष्ठों के URL निकाले है, तो आप को स्क्रैप करना चाहते हैं parseItem (स्वयं, प्रतिक्रिया) आइटम वापस? – friddle

+0

'parseItem' किसी भी अन्य कॉलबैक के रूप में किसी अन्य कॉलबैक – warvariuc

+0

के साथ एक' आइटम' या अन्य 'अनुरोध' वापस कर सकता है, आपके लिए धन्यवाद – friddle

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