python多執行緒爬蟲設計?

時間 2021-06-02 23:22:58

1樓:深海淺港少女與夢

使用多執行緒是因為get頁面所需時間非常長,是後面步驟的幾十上百倍,所以,後面的步驟用不用多執行緒都不是問題。

另外:node-crawler寫爬蟲好寫不累,一口氣寫5個不喘氣,誰用誰知道!

2樓:笑虎

假設乙個爬蟲步驟分為:獲取,解析,儲存。那麼在設計多執行緒爬蟲時應該是乙個執行緒完成這三個步驟,然後執行多個執行緒,還是應該每個執行緒完成乙個步驟。

這裡的兩種思路都不是最好的。

對於Python來說,多執行緒並不能並行執行,而是通過快速的多執行緒切換,讓使用者感覺是並行執行的。這裡自薦一篇我的專欄文章:Python高階:

聊聊IO密集型任務、計算密集型任務,以及多執行緒、多程序。通過這篇文章,你就會大概了解Python中多執行緒、多程序的使用場景。

「獲取」和「儲存」是IO密集型任務,而「解析」大部分是計算密集型任務。

所以,比較合理的思路應該是,N個執行緒進行「獲取」、乙個執行緒進行「解析」、乙個執行緒進行「儲存」。具體思路可參考:擁有屬於自己的Python爬蟲框架--練習編寫多執行緒、協程爬蟲框架。

如果多執行緒與多程序配合,邏輯又應該怎樣呢?

除非你的「解析」任務非常重,否則不建議使用多程序。如果非要配合使用,我的思路是這樣的:

(1)主程序負責排程,共fork出「大於三個」子程序--抓取程序1個、解析程序N個、儲存程序1個。

(2)1個抓取程序生成多個抓取子執行緒,負責抓取任務。

(3)多個解析程序分別負責解析不同的網頁內容,同時將得到的新的URL傳給抓取程序。

(4)儲存程序負責儲存任務。

還是那句話:除非你的「解析」任務非常重,否則不建議使用多程序。因為程序之間的資料通訊比較複雜,也不一定能保證一定正確。

而且大部分爬蟲的瓶頸,是在如何正確的獲取網頁內容、如何反反爬等,而不是速度問題。如果非要追求速度,建議使用分布式爬蟲。

常用的多執行緒多程序爬蟲應該如何設計?

參考:擁有屬於自己的Python爬蟲框架--練習編寫多執行緒、協程爬蟲框架。

另外,python中除了多執行緒、多程序之外,還有「協程」的概念,建議你了解一下。

參考:Python高階:理解Python中的非同步IO和協程(Coroutine),並應用在爬蟲中

3樓:黃哥

1、一般多執行緒用在http 訪問的這一步即可。(也就是你說的獲取url的pagesource)

2、如果是Python3 可以用

18.5. asyncio - Asynchronous I/O, event loop, coroutines and tasks - Python 3.

6.0 documentation

3、如果是Python 可以用What is gevent? - gevent 1.2.2dev0 documentation

4、多程序主要用在CPU密集運算方面,多執行緒主要用在I/O 密集運算方面.

多執行緒爬蟲如何停止?

八爪魚採集器 你每次抓取完不都是有狀態的,404,301,200之類的,來判斷你是否這一位址是否採集完成 你要廣度還是深度,都是有層級的,這就讓你總的鏈結是可控的你應該得有佇列池的概念,重試的概念 另外,這問題描述得真不清楚,建議你看一下搜尋引擎原理吧 cloudy 按照你的設計思路,看起來是每個w...

Python 多執行緒效率不高嗎?

小強很忙忙 python受到GIL保護,在同一時刻,只有一條執行緒可以向前執行。原因 python的標準實現是cpython,在執行python程式時為了防止cpython受到先佔式多執行緒切換,破壞直譯器的狀態,所以加上GIL 全域性鎖直譯器 來保持位元組碼直譯器的協調性。之所以支援多執行緒 1....

關於多執行緒程式設計和CPU多核多執行緒的關係?

佐佐浪 具體到你的例子,修改優先順序和修改時間片是無法達到這個效果的。你需要做的是把你的計算部分做成並行的。單獨乙個執行緒是達不到你要的效果的。 棒子先生 首相我們了解下為什麼需要用到4核,這是由於不能盲目的提高CPU的主頻和頻寬,這樣會產生各種實際很難處理的問題,比如溫度飆公升等。舉例來說我們需要...