2012-04-02 72 views
2

的处理顺序我写一个网络爬虫是在同一时间处理多个网址,并在工作方式如下:Python的线程模块

  1. 它得到一个URL从URL列表包含在seed_list。 txt,

  2. 它抓取它并将数据写入data.txt;

就像大多数网络爬虫工作。

当我使它成为单线程时,我可以按照与seed_list.txt中的URL相同的顺序获取data.txt中的数据,但是当它是多线程时,我似乎无法控制它随着每个线程完成后将数据写入data.txt。

有没有办法让我的网络爬虫多线程,但保持原来的秩序?

非常感谢!


@Lance,伊格纳西奥和马克西姆,

谢谢大家的帮助 - 你的答案绝对点我在正确的方向。

回答

1

您可以创建一个具有seed_list.txt行的索引编号的类,URL以及网络中数据的位置。这种类型的对象可以使用行号和URL创建,然后将其传递给工作线程,该工作线程将数据放入对象中,然后将该对象传递给写线程,该写线程将按线排序对象编号并根据需要输出数据。

+0

非常感谢您指点我正确的方向。 – BananaOnTheWall 2012-04-03 04:20:01

2

创建一个额外的线程,负责枚举每个爬虫线程的结果。

1

您可以运行一个特殊的线程来输出数据并通过队列与其交互。我的意思是你的'抓取'线程不会将结果写入文本文件,而是将其放入队列。

此'输出'线程可以对结果进行排序/过滤。