Scrapy的最佳表现

时间:2016-03-14 11:56:06

标签: python web-scraping scrapy scrapy-spider

我在专用服务器上使用Scrapy,我想知道如何为我的抓取工具获得最佳性能。

以下是我的自定义设置:

custom_settings = {
    'RETRY_ENABLED': True,
    'DEPTH_LIMIT' : 0,
    'DEPTH_PRIORITY' : 1,
    'LOG_ENABLED' : False,
    'CONCURRENT_REQUESTS_PER_DOMAIN' : 32,
    'CONCURRENT_REQUESTS' : 64,
}

我实际上爬了大约200个链接/分钟。

服务器:

32 Go RAM : DDR4 ECC 2133 MHz
CPU : 4c/8t : 2,2 / 2,6 GHz

2 个答案:

答案 0 :(得分:5)

1)使用Scrapyd run spiders

2)scrapy中用于过滤访问过的网址的默认重复过滤器使用url指纹列表 - 基本上sha1哈希长度为40个字符,在Python 2.7中长度为77个字节。假设您必须使用2M页面刮取一个站点,然后您的重复过滤器列表可能会增长到每个Crawler 2M * 77b = 154Mb。为了能够同时刮掉300个这样的域,你需要300 * 154Mb = 42G的内存。幸运的是还有另一种方式 - 布隆过滤器

3)在生产中我使用Scrapyd和Scrapy蜘蛛在分布式环境中运行

4)恕我直言,我建议使用较小的商品机与scrapyd实例并运行蜘蛛而不是使用大型巨型机器。

5)分布式crawlers - 我个人没有使用它。

6)使用Scrapy Debug查找内存管理(日志:2015-07-20 20:32:11-0400 [scrapy] DEBUG:telnet控制台监听127.0.0.1:6023)

telnet localhost 6023

prefs()

实时参考

# scrapy class                 Memory   Time ago
HtmlResponse                        3   oldest:   5s ago
CraigslistItem                    100   oldest:   5s ago
DmozItem                            1   oldest:   0s ago
DmozSpider                          1   oldest:   6s ago
CraigslistSpider                    1   oldest:   5s ago
Request                          3000   oldest: 705s ago
Selector                           14   oldest:   5s ago

答案 1 :(得分:0)

您每秒抓取3页。除非你的网页'响应时间非常长,给定image_type时,响应时间太短。 Bloom过滤器似乎是您将来可能遇到的一个问题。现在,你需要7天的全职时间来抓取2M页面(并使用154Mb的Ram)。