我在专用服务器上使用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
答案 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)。