Tag - scrapy

  1. Scrapy 暗坑之 start_requests

    众所周知,Scrapy 默认会过滤重复的 URL,不会重复抓取相同的 URL,除非显式指定。

    于是随便写了一个爬图片地址的小虫,然而不知道为什么总会爬两次 baidu 首页,你能看出错在哪里吗?

    class ImageSpider(scrapy.Spider):
        name = "images"
        allowed_domains = ["www.baidu.com"]
        start_urls = ['https://www.baidu.com/']
    
        def parse(self, response):
            images = response.xpath('//img/@src').extract()
            for image in images:
                image_item = ImageItem()
                image_item['img_url'] = response.urljoin(image.strip())
                yield image_item
    
            urls = response.xpath('//a/@href').extract()
            for url in urls:
                next_url = response.urljoin(url.strip())
                yield Request(next_url)
    

    我想了半天都不明白为什么,以为是过滤器的问题,查了半天资料仍没解决。 后来偶然看了 Spider 源码,才发现坑爹之处。

    原来源码的 start_requests 是这样写的(已忽略无关代码)

    def start_requests(self):
        for url in self …