use*_*000 7 python scrapy web-scraping python-3.x
我正在尝试使用 Scrapy 抓取一个相当大的网站(大约有 100 万页)。蜘蛛工作正常,它能够在由于内存不足而不可避免地崩溃之前抓取几千页。
我尝试过的事情:
-s JOBDIR=<DIRECTORY>: 这给了我一个初步的改进,我能够抓取大约两倍于以前方法的 URL。然而,即使有这个选项,Scrapy 的内存消耗也会缓慢增加,直到被内存不足杀手杀死。有什么我遗漏的东西可以帮助我完成抓取吗?
小智 1
不存储任何中间数据。检查代码是否经历任何无限循环。
要存储 URL,请使用任何排队代理,例如 RabbitMq 或 Redis。
对于最终数据,使用 python 数据库连接库存储在任何数据库中(sqlalchemy、mysqlconnecter、pyodc 等,具体取决于所选的数据库)
这可以帮助您的代码分布式且高效地运行(记住使用 NUllpool 或 singlepool 以避免过多的数据库连接)
简单有效的方法是使用 sqlite 数据库在状态为完成或尚未的表中插入 100 万条,在爬行并将 URL 数据存储到另一个数据表中后将 URL 表从“尚未”更新为“完成”这有助于跟踪所抓取的URL 的数量,并且可以在出现任何问题时重新启动脚本并仅抓取未完成的日期。