• <th id="bb20k"></th>
    1. <th id="bb20k"></th>
      1. <th id="bb20k"></th>
        <progress id="bb20k"></progress>

        您的位置:新聞資訊 >文章內容
        爬蟲如何實現多線程分步爬取
        來源:Geek_Arking 作者:admin 時間:2018-12-14 17:53:28

        大數據時代,爬蟲需要采集的數據越來越多,小爬蟲是無法滿足采集工作的,而且效率也非常慢,通常爬蟲可以使用多線程加快采集工作,提高工作的效率,那么如何實現多線程分步爬取呢?

        另外,采用多線程,也需要注意控制采集的速度,避免給對方帶去毀滅性的傷害。

        Python里控制多線程只需要用到模板threading,而且只需要用到其中的Thread。

        簡單的使用方法如下:

        如何實現多線程分步爬取

        Thread使用方法為:

        threading.Thread(target=線程運行的函數,args=(參數)) 其中參數用逗號分隔,并以逗號結尾。

        隨后使用start啟動。

        運行結果如下:

        可以看到五個線程同步運行,因sleep設置的時間相同,所以也同步結束。

        但有一個缺點是第16行代碼在五個線程啟動后隨即也就運行了,相當于此時主線程已經結束了而那五個子線程還在運行。

        控制策略有兩個

        在start之前把子線程設置為守護線程

        修改代碼如下:

        1 for i in range(1,thread+1):

        2   t = threading.Thread(target=spider,args=(i,))

        3   t.setDaemon(True)

        4   t.start()

        運行結果如下:

        子線程在主線程結束的時候也同步結束,未運行的部分也就不再運行了。

        在主線程中使用join,讓主線程掛起等待子線程結束

        修改代碼如下:

        1 for i in range(1,thread+1):

        2     t = threading.Thread(target=spider,args=(i,))

        3     t.start()

        4 t.join()

        從運行結果可以看到主線程停留在t.join()的位置,一直等到五個子線程全部結束后才開始繼續向后運行。

        以上就是需要用到的threading模板里所有的東西了。

        在整理好需要處理的數據列表后,我們只需要將列表分段分別交給不同的線程來處理,主線程等待所有數據處理完畢之后再進行下一步操作,如下:

        如何實現多線程分步爬取

        運行結果如下:

        五個線程分步處理各自被分配到的數據,總體運行時間大幅縮減。當然機器給力的話,可以增加線程數,得到更快的速度。


        相關文章內容簡介
        解鎖高速不限量IP代理
        在線咨詢
        微信公眾號

        微信公眾號

        回到頂部
        国产欧美 一区,国产一本大道香蕉AV,国产亚洲卡通另类图片,国产高清AV在线