Scrapy spider更喜欢一个域(这会减慢进程)

时间:2018-02-14 17:54:47

标签: python scrapy

我正在使用Crawler获取域名列表,并且每个域都会计算此页面上的网址数量。

我为此目的使用CrawlSpider但是存在问题。

当我开始抓取时,似乎会向多个域发送多个请求,但在一段时间(一分钟)后,它会结束抓取一个页面(域)。

设置

CONCURRENT_REQUESTS = 100
CONCURRENT_REQUESTS_PER_DOMAIN = 3
REACTOR_THREADPOOL_MAXSIZE = 20

在这里,您可以看到为特定域抓取了多少网址:

enter image description here

7分钟后 - 正如您所看到的那样,它只针对第一个域名而忘记了其他域名

enter image description here

如果scrapy一次只针对一个域,它在逻辑上会减慢进程。我想在短时间内向多个域发送请求。

class MainSpider(CrawlSpider):
    name = 'main_spider'
    allowed_domains = []

    rules = (
        Rule(LinkExtractor(), callback='parse_item', follow=True, ),
    )

    def start_requests(self):
        for d in Domain.objects.all():
            self.allowed_domains.append(d.name)
            yield scrapy.Request(d.main_url, callback=self.parse_item, meta={'domain': d})

    def parse_start_url(self, response):
        self.parse_item(response)

    def parse_item(self, response):
        d = response.meta['domain']
        d.number_of_urls = d.number_of_urls + 1
        d.save()
        extractor = LinkExtractor(allow_domains=d.name)
        links = extractor.extract_links(response)
        for link in links:
            yield scrapy.Request(link.url, callback=self.parse_item,meta={'domain': d})

它似乎只关注第一个域,直到它没有全部删除。

0 个答案:

没有答案