结合基URL与scrapy所得HREF(Combining base url with result

2019-07-29 15:33发布

下面是我的蜘蛛的代码,

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

任何人都可以让我知道为什么我收到此错误以及如何加入基本的URL与HREF链接,并产生一个请求

Answer 1:

那是因为你没有添加的方案,例如:http://你的基本URL。

尝试: urlparse.urljoin('http://www.domain.com/', i[1:])

或者更简单: urlparse.urljoin(response.url, i[1:])作为urlparse.urljoin将整理出基本URL本身。



Answer 2:

另一种解决方案,如果你不希望使用urlparse

response.urljoin(i[1:])

该解决方案更进一步甚至步:这里Scrapy作品出来加入域的基础。 正如你所看到的,你没有提供明显的http://www.example.com加盟。

这使你的代码在未来可重复使用的 ,如果你想改变你的爬行域。



文章来源: Combining base url with resultant href in scrapy