2012-05-29 15 views
8

नीचे मेरी मकड़ी कोड,scrapy में परिणामी href के साथ आधार यूआरएल का मेल

class Blurb2Spider(BaseSpider): 
    name = "blurb2" 
    allowed_domains = ["www.domain.com"] 

    def start_requests(self): 
      yield self.make_requests_from_url("http://www.domain.com/bookstore/new") 


    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     urls = hxs.select('//div[@class="bookListingBookTitle"]/a/@href').extract() 
     for i in urls: 
      yield Request(urlparse.urljoin('www.domain.com/', i[1:]),callback=self.parse_url) 


    def parse_url(self, response): 
     hxs = HtmlXPathSelector(response) 
     print response,'------->' 

यहाँ मैं आधार लिंक के साथ href लिंक गठबंधन करने के लिए कोशिश कर रहा हूँ, लेकिन मैं निम्नलिखित त्रुटि हो रही है, है

exceptions.ValueError: Missing scheme in request url: www.domain.com//bookstore/detail/3271993?alt=Something+I+Had+To+Do 

किसी को भी मुझे पता है क्यों मैं इस त्रुटि हो रही है और कैसे href लिंक के साथ आधार यूआरएल में शामिल होने और एक अनुरोध

उत्तर

9

उपज यह इसलिए है क्योंकि आप योजना में नहीं जोड़ा था करने के लिए दे सकते हैं, जैसे http: अपने आधार में // यूआरएल।

प्रयास करें: urlparse.urljoin('http://www.domain.com/', i[1:])

या और भी अधिक आसान: urlparse.urljoin आधार URL ही सुलझा जाएगा urlparse.urljoin(response.url, i[1:]) के रूप में।

+1

आपको बहुत धन्यवाद, मुझे जवाब मिला। –

+0

और साथ ही आप मुझे urlparse और urljoin के बीच का अंतर बता सकते हैं क्योंकि उनमें से किसी एक का उपयोग करके भी मैं जवाब प्राप्त कर सकता हूं –

+0

दोनों विधियां urlparse.urlparse और urlparse.urljoin urlparse मॉड्यूल का हिस्सा हैं। यह भी देखें: http://docs.python.org/library/urlparse.html –

0

एक वैकल्पिक समाधान है, आप urlparse का उपयोग नहीं करना चाहते हैं:

response.urljoin(i[1:])

यह समाधान भी एक कदम आगे चला जाता है: यहाँ Scrapy शामिल होने के लिए डोमेन आधार बाहर काम करता है। और जैसा कि आप देख सकते हैं, आपको शामिल होने के लिए स्पष्ट http://www.example.com प्रदान करने की आवश्यकता नहीं है।

यह भविष्य में आपके कोड पुन: प्रयोज्य बनाता है यदि आप उस डोमेन को बदलना चाहते हैं जिसे आप क्रॉल कर रहे हैं।

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