2012-05-29 26 views
8

dưới đây là mã nhện của tôi,Kết hợp địa chỉ cơ sở với href kết quả trong scrapy

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,'------->' 

Ở đây tôi đang cố gắng để kết hợp các liên kết href với liên kết cơ sở, nhưng tôi đang nhận được lỗi sau,

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

Bất kỳ ai cũng có thể cho tôi biết lý do tôi gặp lỗi này và cách tham gia url cơ sở với liên kết href và yêu cầu

Trả lời

9

Đó là vì bạn không thêm lược đồ, ví dụ: http: // trong cơ sở của bạn url.

Hãy thử: urlparse.urljoin('http://www.domain.com/', i[1:])

Hoặc thậm chí dễ dàng hơn: urlparse.urljoin(response.url, i[1:]) như urlparse.urljoin sẽ sắp xếp ra URL cơ sở riêng của mình.

+1

Cảm ơn bạn rất nhiều tôi đã nhận được câu trả lời. –

+0

Và đồng thời bạn có thể cho tôi biết sự khác biệt giữa urlparse và urljoin bởi vì bằng cách sử dụng bất kỳ một trong số họ quá tôi có thể nhận được câu trả lời –

+0

Cả hai phương pháp urlparse.urlparse và urlparse.urljoin là một phần của mô-đun urlparse. Xem thêm: http://docs.python.org/library/urlparse.html –

0

Một giải pháp thay thế, nếu bạn không muốn sử dụng urlparse:

response.urljoin(i[1:])

Giải pháp này thậm chí còn đi một bước xa hơn: đây Scrapy hoạt động ra các cơ sở miền với tham gia. Và như bạn có thể thấy, bạn không cần phải cung cấp rõ ràng http://www.example.com để tham gia.

Điều này làm cho mã của bạn có thể sử dụng lại trong tương lai nếu bạn muốn thay đổi miền bạn đang thu thập thông tin.

Các vấn đề liên quan