Scrapy的最佳表现

Pix*_*xel 4 python scrapy web-scraping 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,
}
Run Code Online (Sandbox Code Playgroud)

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

服务器:

32 Go RAM : DDR4 ECC 2133 MHz
CPU : 4c/8t : 2,2 / 2,6 GHz
Run Code Online (Sandbox Code Playgroud)

bac*_*ack 7

1)使用Scrapydrun spiders

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

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

4)恕我直言,我建议使用带有报废实例的较小商品机器并运行蜘蛛而不是使用大型巨型机器.

5)分布式爬虫 - 我没有亲自使用它.

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

telnet localhost 6023

prefs()
Run Code Online (Sandbox Code Playgroud)

实时参考

# 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
Run Code Online (Sandbox Code Playgroud)