2012-04-02 96 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

您可以運行一個特殊的線程來輸出數據並通過隊列與其交互。我的意思是你的'抓取'線程不會將結果寫入文本文件,而是將其放入隊列。

此'輸出'線程可以對結果進行排序/過濾。