在Python中设计多进程爬虫

3 投票
2 回答
1660 浏览
提问于 2025-04-15 16:18

我正在用Python开发一个多进程的爬虫。这个爬虫的工作是从一个页面开始抓取链接,然后逐步深入。具体来说,最上层的页面包含一个类别列表,第二层页面展示这些类别中的活动,而最后一层页面则是活动中的参与者。我无法预测会有多少类别、活动或参与者。

我对如何设计这样一个爬虫有点困惑,特别是如何判断它什么时候完成抓取(预计它会一直运行,直到发现并获取所有相关页面)。

理想情况下,第一次抓取应该是同步的,而之后的抓取则是异步的,这样可以最大化并行解析和添加数据到数据库,但我现在不知道如何判断抓取是否完成。

你会建议我如何构建这个爬虫,特别是在并行处理和上述问题上?

2 个回答

2

你可以看看 Scrapy,这是一个基于 Twisted 的异步网页抓取工具。对于你的任务来说,定义蜘蛛的XPath描述应该会很简单!

祝你好运!

(如果你真的想自己动手,可以考虑用一个小的sqlite数据库来记录每个页面是否被访问过……或者如果数据量不大,就直接在内存中处理……总的来说,Twisted可能会对你有帮助。)

1

我猜你是在一个叫做队列的地方放置要处理的项目,然后用一些工作者来处理这些项目。工作者会找到新的项目并把它们添加到队列里。

当所有的工作者都闲着,队列里的项目也处理完了,这个过程就结束了。

当工作者使用队列的task_done()方法时,主线程可以使用join()方法来等待,直到队列为空为止。

撰写回答