在Python中设计一个多进程蜘蛛

时间:2009-11-23 17:20:13

标签: python multithreading web-crawler

我正在研究Python中的多进程蜘蛛。它应该开始抓取一页链接并从那里开始工作。具体而言,顶级页面包含类别列表,这些类别中的第二级页面事件以及事件中参与者的最终三级页面。我无法预测会有多少类别,事件或参与者。

我对如何最好地设计这样一只蜘蛛感到有点失落,特别是如何知道它何时完成爬行(它预计会继续发展,直到它发现并检索到每个相关页面)。

理想情况下,第一个scrape是同步的,其他所有异步都是最大化并行解析并添加到数据库中,但我仍然坚持如何弄清楚爬行何时完成。

你如何建议我根据并行过程,特别是上述问题构建蜘蛛?

2 个答案:

答案 0 :(得分:2)

您可能希望查看Scrapy,一个异步(基于Twisted)网络抓取工具。看起来对于你的任务来说,蜘蛛的XPath描述很容易定义!

祝你好运!

(如果你真的想自己做,也许可以考虑使用小的sqlite数据库跟踪每个页面是否被击中......或者如果它的大小合理,只需在内存中进行...扭曲进入将军可能是你的朋友。)

答案 1 :(得分:1)

我假设您要在queue中放置要访问的项目,耗尽工作人员的队列,并且工作人员会找到要访问的新项目并将其添加到队列中。

当所有工作人员都空闲时,它已完成,并且要访问的项目队列为空。

当工作人员利用队列的task_done()方法时,主线程可以join()阻塞队列直到它为空。