分頁爬蟲執行緒模式

來源:互聯網
上載者:User

標籤:

1、1個主線程+1個列表線程+N個明細線程

對要爬取的網站資料,基本是採用分頁的形式展現,通過遍曆列表解析明細URL,進而爬取明細頁面內容;

每個網站一個處理線程,爬取列表和爬取明細採用單獨的子線程,列表爬取線程相當於產生者,分頁一般在幾十條,有些網站可在請求中指定分頁大小參數可達百條一頁,生產速度足夠消費,單線程爬取解析列表,往無界阻塞隊列存待爬的明細url,根據頻寬(避免IO逾時)和伺服器效能(500響應碼)配置N個明細爬取線程作為消費者,對爬取內容進行解析,緩衝解析後實體物件,達到一定量時批量持久化。列表單線程生產速度可控,看過幾個開源架構列表和明細的url是在同一個隊列,那就會有優先順序問題,隊列中同時有列表和明細時需要明細先爬,未區分列表和明細,每個線程既處理列表又處理明細,何時停止爬取是個麻煩問題,隊列中沒有可用url並不代表爬完,可能有某個線程還在爬一個列表呢。

2、爬完一個網站需要記錄爬取情況日誌資訊,比如新增記錄數、修改記錄數、服務端異常次數(異常太多可減少明細線程數)、IO異常次數(異常太多可減少明細線程數)、開始時間、結束時間、異常資訊等;

3、多個網站同時爬取時在外面套一層,3層線程結構,第一層裡啟動各源線程,第二層裡啟動列表和明細;

run(){    for(int i=0;i<x;i++)new Thread(new PullXXX()).start();}AbstractPull implements Runnable{    PullList   implements Runnable{};    PullDetail implements Runnable{};    run()    {        new Thread(new PullList()).start();        for(int i=0;i<N;i++)        {            new Thread(new PullDetail()).start();        }        CountDownLatch.await();        log();    }}


分頁爬蟲執行緒模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.