python爬蟲 非同步爬蟲

2021-10-11 03:19:54 字數 1615 閱讀 7417

壞處:無法無限制的開啟多執行緒或者多程序。

執行緒池、程序池:適當使用

使用非同步實現高效能的資料爬取操作(人多力量大)

# 環境安裝:pip install aiohttp

# 使用該模組中的clientsession

)# 2表示同時存在兩個協程

pool = pool(2)

urls =

for i in

range(10

):''

)print

(urls)

# 生成一組請求url,每個都會被阻塞2s

# 使用async新建乙個協程

#text()返回字串形式的響應資料

#read()返回的二進位制形式的響應資料

#json()返回的就是json物件

#注意:獲取響應資料操作之前一定要使用await進行手動掛起

page_text =

await response.text(

)print

(page_text)

tasks =

for url in urls:

c = get_page(url)

task = asyncio.ensure_future(c)

loop = asyncio.get_event_loop(

)loop.run_until_complete(asyncio.wait(tasks)

)end = time.time(

)print

('總耗時:'

,end-start)

乙個執行緒可以多個協程,乙個程序也可以單獨擁有多個協程。

執行緒程序都是同步機制,而協程則是非同步。

協程能保留上一次呼叫時的狀態,每次過程重入時,就相當於進入上一次呼叫的狀態。

執行緒是搶占式,而協程是非搶占式的,所以需要使用者自己釋放使用權來切換到其他協程,因此同一時間其實只有乙個協程擁有執行權,相當於單執行緒的能力。

協程並不是取代執行緒, 而且抽象於執行緒之上, 執行緒是被分割的cpu資源, 協程是組織好的**流程, 協程需要執行緒來承載執行, 執行緒是協程的資源, 但協程不會直接使用執行緒, 協程直接利用的是執行器(interceptor), 執行器可以關聯任意執行緒或執行緒池, 可以使當前執行緒, ui執行緒, 或新建新程.。

執行緒是協程的資源。協程通過interceptor來間接使用執行緒這個資源。

python爬蟲學習(二十)非同步爬蟲 執行緒池

import time 使用單執行緒序列的方式執行 def get page str time.sleep 2 name list xiaozi aa bb cc start time time.time for i in range len name list get page name list...

Python爬蟲 非同步爬蟲(多程序和多執行緒)

非同步爬蟲 在爬蟲中使用非同步實現高效能的資料爬取操作 執行緒是程式執行的最小單位,乙個程序可以有多個執行緒。非同步爬蟲的方式 多程序,多執行緒 不建議 好處 可以為相關阻塞的操作單獨開啟程序或者執行緒,阻塞操作就可以非同步執行 繼續執行阻塞的操作之後的 弊端 無法無限制地開啟多程序或者多執行緒 程...

Python爬蟲 初識爬蟲

模擬瀏覽器開啟網頁,獲取網頁中我們想要的那部分資料 瀏覽器開啟網頁的過程 當你在瀏覽器中輸入位址後,經過dns伺服器找到伺服器主機,向伺服器傳送乙個請求,伺服器經過解析後傳送給使用者瀏覽器結果,包括html,js,css等檔案內容,瀏覽器解析出來最後呈現給使用者在瀏覽器上看到的結果 瀏覽器傳送訊息給...