Python3爬蟲與多執行緒

2021-09-21 02:10:07 字數 1084 閱讀 7722

企鵝號 - 你收到一封新郵件

# 介紹這個爬蟲的目的、模組,創造原始單執行緒爬蟲

# 對這個爬蟲進行改造,創造多執行緒爬蟲

一、爬蟲功能介紹

文章標題取的是《python爬蟲與多執行緒》,而不是《python多執行緒爬蟲》,因為爬蟲的目的是為了獲取資料而非炫技。即使沒有多執行緒,單執行緒的爬蟲也可以完成任務,大不了電腦不關放一夜跑(做量化回測中常有的事)。

下面就介紹這個爬蟲的功能,是用來爬取所有帖子的標題、描述、**、發布時間,分別對應資料庫的四個字段:title、description、url、time。

下面依次介紹**的實現邏輯:

(1)構造出一頁的url,比如?pg=1,使用自定義的get_html函式獲得html內容:

(2)使用beautiful庫解析內容,獲得我們需要的資訊。通過chrome的審查元素功能可以發現,網頁的結構如下圖:

加粗的標籤是含有資訊的標籤,所以我們用tags = soup.find_all('div',attrs=)找到所有的div標籤,每頁可以得到五十個標籤。

下面使用自定義的get_info函式對每個標籤做子解析:

(3)將資訊儲存到本地檔案或資料庫。

以上,我們實現了乙個功能完整的單執行緒爬蟲,耗時在十幾分鐘。第二部分討論可以在哪些環節降低延遲。

二、多執行緒爬蟲

上文的爬蟲流程:獲取頁面 -> 解析頁面 -> 資料儲存,在這些環節中的耗時分別是:

(1)獲取頁面,由於網路延遲,一頁通常需要1-2s,這是最主要的延遲;

(2)資料儲存,由於是儲存到本地資料庫,速度較快。

下面考慮怎麼降低延遲:

(1)建立乙個consumer類和多個例項,用於對每個頁面的獲取、解析和儲存。

(2)用乙個佇列queue物件,來實現consumer類不斷獲取**。

**邏輯如下:

先產生所有url,put進佇列;

然後產生八個消費者,用於不斷從佇列中取出**,進行獲取、解析和儲存;

所有資訊儲存到記憶體中,然後批量儲存到資料庫或csv。

這個流程下來,有八個worker並行工作,所以效率提公升很多。

consumer類的**如下:

三、最後呈現的資料長這樣:

Python3多執行緒

學習python執行緒 python3 執行緒中常用的兩個模組為 thread threading 推薦使用 thread 模組已被廢棄。使用者可以使用 threading 模組代替。所以,在 python3 中不能再使用 thread 模組。為了相容性,python3 將 thread 重新命名為...

python3 多執行緒

多執行緒簡介 執行緒 thread 也稱輕量級程序,時作業系統能夠進行運算排程的最小單位,它被包涵在程序之中,時程序中的實際運作單位。執行緒自身不擁有資源,只擁有一些在執行中必不可少的資源,但他可與同屬乙個程序的其他執行緒共享程序所擁有的全部資源。乙個執行緒可以建立和撤銷另乙個執行緒,同一程序中的多...

python3 多執行緒,執行緒鎖

python使用多執行緒,不一定執行速度快,這裡引入gil global interpreter lock python直譯器中任意時刻都只有乙個執行緒在執行 gil執行過程 1 設定乙個gil 2 切換執行緒去準備執行任務 runnale就緒狀態 3 執行 4 可能出現的狀態 執行緒任務執行結束 ...