我正在编写一个网络抓取工具,可以同时处理多个网址,并按以下方式工作:
它从seed_list.txt中包含的网址列表中获取网址,
它抓取它并将数据写入data.txt;
就像大多数网页抓取工作一样。
当我使用单线程时,我可以使用seed_list.txt中URL的顺序获取data.txt中的数据,但是当它是多线程时,我似乎无法控制它,因为每个线程一旦完成就将数据写入data.txt。
有没有办法让我的网络抓取工具多线程但保留原始订单?
非常感谢!
@Lance,Ignacio和Maksym,
谢谢大家的帮助 - 你的答案肯定会指出我正确的方向。
答案 0 :(得分:2)
创建一个额外的线程,负责枚举每个爬网程序线程的结果。
答案 1 :(得分:1)
您可以创建一个类,其中包含seed_list.txt
行的索引号,URL以及来自Web的数据。可以使用行号和URL创建此类型的对象,然后将其传递给将将数据放入对象的工作线程,然后将对象传递给写入线程,该线程将按行对对象进行排序编号并根据需要输出数据。
答案 2 :(得分:1)
您可以运行一个特殊的线程来输出数据并通过队列与之交互。我的意思是你的'抓取'线程不会将结果写入文本文件,而是将其放入队列。
此“输出”主题可以对结果进行排序/过滤。