【发布时间】:2018-01-28 00:47:35
【问题描述】:
我正在尝试使用 Scrapy 抓取一个相当大的网站(大约 100 万页)。蜘蛛工作正常,它能够抓取几千页,然后由于内存不足而不可避免地崩溃。
我尝试过的事情:
- 使用
-s JOBDIR=<DIRECTORY>:这给了我一个初步的改进,我能够抓取的 URL 数量是以前方法的两倍。但是,即使使用此选项,Scrapy 的内存消耗也会缓慢增加,直到它被内存不足的杀手杀死。 - 防止不必要的功能,例如通过将日志限制从 DEBUG 提高到 INFO 来防止过度输出。
- 使用 yield 语句而不是返回数组。
- 将返回的数据保持在绝对最小值。
- 在更强大的机器上运行蜘蛛:这有助于我爬得更多,但不可避免地它会在稍后再次崩溃(我离 100 万大关还很远)。
有什么我缺少的东西可以帮助我完成抓取吗?
【问题讨论】:
-
你试过降低
CONCURRENT_REQUESTS吗? -
100 万不是一个大数字,所以我假设您在请求时会使用
meta。您正在某处泄漏内存。看看这是否有帮助benbernardblog.com/tracking-down-a-freaky-python-memory-leak
标签: python python-3.x web-scraping scrapy