gpt4 book ai didi

python - Scrapy/Python 请求优先级和 CONCURRENT_REQUESTS

转载 作者:行者123 更新时间:2023-12-01 01:03:17 26 4
gpt4 key购买 nike

我正在抓取具有单个 IP 的单个域。它有一个商店 URL 列表,每个商店 URL 都有一个产品列表(多页)

首先,我会检查商店 URL 并生成请求,同时分配每个商店较小的优先级。商店 1 获得 -1,商店 2 获得 -2,依此类推。

加载下一页产品列表 URL 时,我为请求分配相同的优先级。

当设置了 CONCURRENT_REQUESTS 时,这一切都可以正常工作。我依次加载了优先级为 -1 和 -2 的 URL。 Scrapy 不会处理优先级为 -3 或更低的 URL。

但是,我尝试了 CONCURRENT_REQUESTS_PER_DOMAINCONCURRENT_REQUESTS_PER_IP,这些最终加载的网址的优先级为 -1、-2、-3、-4。

我想了解为什么 CONCURRENT_REQUESTS 的工作方式与 ...PER_DOMAIN...PER_IP 选项不同,因为我从具有单个 IP 地址的单个域。

谁能解释一下吗?

这里是示例代码,看看它是如何失败的:

from scrapy.spiders import Spider, Request
import scrapy
import logging

class MySpider(Spider):

custom_settings = {
'DEPTH_STATS_VERBOSE': True,
# 'CONCURRENT_REQUESTS': 1,
'CONCURRENT_REQUESTS_PER_DOMAIN': 1,
'CONCURRENT_REQUESTS_PER_IP': 1,
'AUTOTHROTTLE_TARGET_CONCURRENCY': 1,
}

name = 'toscrapecom'
start_urls = ['http://books.toscrape.com/catalogue/page-1.html']

urls1 = (
'http://books.toscrape.com/catalogue/page-{}.html'.format(i + 1) for i in range(5)
)

urls2 = (
'http://books.toscrape.com/catalogue/page-{}.html'.format(i + 1) for i in range(5,10)
)

def parse(self, response):
reqPriority = 20
for url in self.urls1:
yield Request(url,priority=reqPriority,callback=self.next_page)
logging.info("%s Priority %s URL %s", self.name, reqPriority, url)
reqPriority = reqPriority - 1

def next_page(self,response):
reqPriority = 40
for url in self.urls2:
yield Request(url,priority=reqPriority)
logging.info("%s Priority %s URL %s", self.name, reqPriority, url)
reqPriority = reqPriority - 1

最佳答案

请求优先级并不能确保顺序。

如果您有 16 个请求,每个请求都有不同的优先级,并且 CONCURRENT_REQUESTS_PER_DOMAIN16,则所有 16 个请求几乎同时发送,并且按顺序进行解析它们来自服务器,这不太可能与它们的优先级值匹配。

CONCURRENT_REQUESTSCONCURRENT_REQUESTS_PER_DOMAIN 实际上可以结合使用。 CONCURRENT_REQUESTS_PER_DOMAIN 默认为 8,不定义 CONCURRENT_REQUESTS_PER_DOMAIN 相当于定义为 8 作为值。如果您在设置 CONCURRENT_REQUESTS_PER_DOMAIN 时看到不同的行为,那一定是因为您使用了 8 以外的值。

CONCURRENT_REQUESTS_PER_IP,顾名思义,它与 CONCURRENT_REQUESTS_PER_DOMAIN 不同。如果已定义,则忽略 CONCURRENT_REQUESTS_PER_DOMAIN 的值。

关于python - Scrapy/Python 请求优先级和 CONCURRENT_REQUESTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55601375/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com