我正在用Python编写一个爬虫程序,为了使Ctrl + C不会导致我的爬虫在下次运行中重新开始,我需要将处理双端队列保存在一个文本文件中(每行一个项目)并更新它每次迭代,更新操作都需要超快。为了不重新发明轮子,我问是否有一个已建立的模块来执行此操作?
答案 0 :(得分:4)
作为替代方案,您可以设置退出功能,并在退出时挑选双端队列。
答案 1 :(得分:1)
您应该可以使用pickle来序列化您的列表。
答案 2 :(得分:1)
我不确定我是否理解这个问题,我只是很好奇,所以这里有一些问题和建议:
您是否计划捕获Ctrl + C中断并执行双端队列? 如果爬虫因某些任意原因(如未处理的异常或崩溃)崩溃,会发生什么?你失去了队列状态并重新开始? 来自文档:
请注意
退出时不调用退出功能 该程序被信号杀死, 当一个Python致命的内部错误是 检测到,或os._exit()时 调用。
当您再次访问相同的URI时会发生什么情况,您是在维护访问列表还是其他什么?
我认为你应该为你抓取的每个URI维护某种访问和会话信息/状态。 下次访问同一URI时,您可以使用访问信息决定是否抓取URI。 另一个信息 - 会话信息 - 用于与该URI的最后一个会话将有助于仅获取增量内容,如果页面没有更改,则无需选择它来节省一些数据库I / O成本,重复项等。
这样你就不必担心ctrl + C或崩溃了。如果爬虫由于任何原因而宕机,让我们说在剩下40K以上的时候抓取60K帖子后,下一次爬虫填充队列,虽然队列可能很大但爬虫可以检查它是否已经访问过URI或者不是,当它被抓取时页面的状态是什么 - 优化 - 页面是否需要新的提取,因为它已经改变了。
我希望这有所帮助。
答案 3 :(得分:0)
我想到的一些事情: