现在我有一个简单的网络爬虫,它逐页获取,将它的 url 放入访问列表(也将记录写入数据库),在页面上查找 url,如果它们不在访问列表中,则将它们放入未访问列表。然后它从未访问过的 url 中获取。
简单的。
但是慢。在 DigitalOcean 的最小实例上,它仅使用 2-3% 的 CPU。并且访问列表不断增长。如果我启动 python interpriter (2.7x32) 并创建一个带有类似 url 的字符串的列表,那么它将需要大约 0.5 GB 的 RAM。不好。另外我想在一段时间后从访问列表中删除 url 以再次解析它(信息可以更改)
所以我有几个关于修改这个过程的问题。如何保存进程状态以确保它会快速重新启动,并且如果发生中断,不要遍历每个访问过的 url。
如何在爬虫之间共享当前状态:
- 创建一个 RabbitMQ 队列并将要访问的 url 放入其中
- 使用队列的一些全局python对象在“内部”使用它并在不同线程中的工作人员之间共享
?