查看scrapy的download_delay和Concurrent_requests文档,我的理解是:如果我有' CONCURRENT_REQUESTS':25和download_delay为1秒,这意味着一旦scrapy请求25页,scrapy将等待所有25下载,然后等待1秒,并再次请求25页。如果我使用0秒的download_delay,则scrapy与上面相同,没有1秒延迟。但是当我在我的刮刀中使用这些设置时,这并不像预期的那样工作,因为当我延迟0秒时,我使用0秒延迟时的平均网络使用率是2.1Mbps,而我的网络使用时间是1秒延迟平均只有0.3 Mbps(最大0.4Mbps)。这是我的代码:
class DetailsxxxSpider(scrapy.Spider):
name = "details"
allowed_domains = ["www.xxx.com"]
download_delay = 1
custom_settings = {'CONCURRENT_REQUESTS': 25}
def start_requests(self):
engine = create_engine('sqlite:///temp.db')
Base.metadata.bind = engine
DBSession = sessionmaker(bind=engine)
session = DBSession()
urls = session.query(Temp.url).filter_by(status = "Insert").all()
# print urls
for url in urls:
yield Request(url[0])
使用0秒延迟时,爬行率为1800页/分钟,使用1秒延迟时为43页/分钟,但理想情况下页数/分钟速率应为900页/分钟。当使用1秒延迟时,似乎每个请求都设置了download_delay。
我为每个请求使用代理。我错过了什么? 有没有办法可以在25个请求之后将延迟设置为1秒。 我理想地希望速度达到900页/分钟。任何帮助将不胜感激。
谢谢
答案 0 :(得分:2)
download_delay是在几秒钟内来自同一网站的连续请求之间等待的时间
因此,如果您使用download_delay = 1,您将永远拥有 < 60页/分钟。 (在你的情况下是43)
要获得900页/分钟,您应该使用:
download_delay< (60/900)< 0.067
我的猜测是试试0.05