我一直在使用Scrapy抓取一个电子商务网站,我得到的爬行速度是50~60页/分钟。 我使用8核心linode服务器和24 GB Ram,所以我不认为网络或服务器可能是原因。
我知道如果我们经常抓取它们,有些网站会提供下载延迟,但这是一个大型网站,我也使用 proxymesh 代理,所以这也是不可能的原因。
我想我在settings.py文件中遗漏了一些内容 -
BOT_NAME = 'scraper'
SPIDER_MODULES = ['com.crawler.scraper.spiders']
NEWSPIDER_MODULE = 'com.crawler.scraper.spiders'
ITEM_PIPELINES = {
'com.crawler.scraper.pipelines.generic_pipeline.Pipeline': 300
}
RANDOMIZE_DOWNLOAD_DELAY = False
COOKIES_ENABLED = False
CONCURRENT_ITEMS = 200
CONCURRENT_REQUESTS=50
DOWNLOAD_DELAY= 0
CONCURRENT_REQUESTS_PER_DOMAIN=50
LOG_LEVEL = 'ERROR'
RETRY_TIMES = 2
CONNECTION_TIMEOUT = 30
USER_AGENT_LIST = 'user_agents.txt'
DOWNLOADER_MIDDLEWARES = {
'random_useragent.RandomUserAgentMiddleware': 400,
'com.crawler.scraper.middlewares.proxy_middleware.ProxyMiddleware': 410,
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
}
我从 DOWNLOAD_DELAY 5 开始,现在即使我将其保持为0,但我仍然看不到每分钟请求数量的任何重大变化。
所以,我的问题是 - >
1)我应该怎样做才能将速度提高到至少200个请求/分钟? 2)CONCURRENT_ITEMS的理想值应该是什么?
答案 0 :(得分:1)
CONCURRENT_ITEMS绝对不是解决方案,因为此设置仅对服务器上使用的处理时间产生影响,并且根据您的服务器规格不应产生任何影响。
除了您的设置看起来不错外,您的刮刀应该尽快与网站响应一样快。 (即使将DOWNLOAD_DELAY提高到1,刮刀也有可能每分钟做50 x 60 = 3000次请求)
哦,RANDOMIZE_DOWNLOAD_DELAY也应该设置为True,只是为了确定。
根据您使用的代理数量,目标网站很可能会限制您的抓取工具。
在目前的速度下,如果使用ProxyMesh最小的20个IP计划,您将每隔20秒从同一个IP点击该站点。如果使用他们的100 IP计划,您仍然会每隔100-120秒从每个IP发送一个请求。
在较长时间内执行此操作的速度足以让您的ProxyMesh IP受到限制。另外我会推测你的刮刀在开始时速度更快,然后因此受到限制。
检查我的理论的方法:要么添加更多的IP,速度应相应增加,要么等待24小时,直到ProxyMesh为您分配新的IP,然后再次运行刮刀,观察它是否开始更快,然后被限制。