Scrapy 的最佳性能
Best performance for Scrapy
我在我的专用服务器上使用 Scrapy,我想知道如何让我的爬虫达到最佳性能。
这是我的自定义设置:
custom_settings = {
'RETRY_ENABLED': True,
'DEPTH_LIMIT' : 0,
'DEPTH_PRIORITY' : 1,
'LOG_ENABLED' : False,
'CONCURRENT_REQUESTS_PER_DOMAIN' : 32,
'CONCURRENT_REQUESTS' : 64,
}
我实际上爬了大约 200 link/minutes。
服务器:
32 Go RAM : DDR4 ECC 2133 MHz
CPU : 4c/8t : 2,2 / 2,6 GHz
1) 使用 Scrapyd
运行 蜘蛛
2) 在 scrapy 中用于过滤访问过 urls 的默认重复过滤器使用 url 指纹列表——基本上是 sha1 哈希,长度为 40 个字符,即 77 字节长在 Python 2.7。假设您必须抓取一个具有 2M 页面的网站,那么您的重复过滤器列表可能会增长到每个爬虫 2M * 77b = 154Mb。为了能够同时抓取 300 个这样的域,您将需要 300 * 154Mb = 42G 内存。幸运的是还有另一种方法——Bloom Filter.
3) 在生产中,我在分布式环境中使用 Scrapyd 和 Scrapy 蜘蛛 运行
4) 恕我直言,我建议使用带有 scrapyd 实例和 运行 蜘蛛的小型 商品机器 而不是使用大型巨型机器。
5) 分布式 crawlers - 我个人没用过
6) 使用 Scrapy Debug 查找内存管理(日志:2015-07-20 20:32:11-0400 [scrapy] DEBUG: Telnet console listening on 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
您每秒抓取 3 个页面。除非您的页面的响应时间非常长,否则给定 CONCURRENT_REQUESTS_PER_DOMAIN = 32
就太短了。布隆过滤器似乎是您将来可能会遇到的问题。现在,您需要 7 天的全部时间来抓取 2M 的页面(并使用 154Mb 的 Ram)。
我在我的专用服务器上使用 Scrapy,我想知道如何让我的爬虫达到最佳性能。
这是我的自定义设置:
custom_settings = {
'RETRY_ENABLED': True,
'DEPTH_LIMIT' : 0,
'DEPTH_PRIORITY' : 1,
'LOG_ENABLED' : False,
'CONCURRENT_REQUESTS_PER_DOMAIN' : 32,
'CONCURRENT_REQUESTS' : 64,
}
我实际上爬了大约 200 link/minutes。
服务器:
32 Go RAM : DDR4 ECC 2133 MHz
CPU : 4c/8t : 2,2 / 2,6 GHz
1) 使用 Scrapyd
运行 蜘蛛
2) 在 scrapy 中用于过滤访问过 urls 的默认重复过滤器使用 url 指纹列表——基本上是 sha1 哈希,长度为 40 个字符,即 77 字节长在 Python 2.7。假设您必须抓取一个具有 2M 页面的网站,那么您的重复过滤器列表可能会增长到每个爬虫 2M * 77b = 154Mb。为了能够同时抓取 300 个这样的域,您将需要 300 * 154Mb = 42G 内存。幸运的是还有另一种方法——Bloom Filter.
3) 在生产中,我在分布式环境中使用 Scrapyd 和 Scrapy 蜘蛛 运行
4) 恕我直言,我建议使用带有 scrapyd 实例和 运行 蜘蛛的小型 商品机器 而不是使用大型巨型机器。
5) 分布式 crawlers - 我个人没用过
6) 使用 Scrapy Debug 查找内存管理(日志:2015-07-20 20:32:11-0400 [scrapy] DEBUG: Telnet console listening on 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
您每秒抓取 3 个页面。除非您的页面的响应时间非常长,否则给定 CONCURRENT_REQUESTS_PER_DOMAIN = 32
就太短了。布隆过滤器似乎是您将来可能会遇到的问题。现在,您需要 7 天的全部时间来抓取 2M 的页面(并使用 154Mb 的 Ram)。