Scrapy爬行速度很慢

时间:2017-04-24 05:20:03

标签: python scrapy

我一直在使用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的理想值应该是什么?

1 个答案:

答案 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,然后再次运行刮刀,观察它是否开始更快,然后被限制。