python 使用第三方庫tomorrow實現併發

2022-06-30 22:09:13 字數 2357 閱讀 1877

tomorrow是我最近在用的乙個爬蟲利器,該模組屬於第三方的模組,使用起來非常的方便,只需要用其中的threads方法作為裝飾器去修飾乙個普通的函式,既可以達到併發的效果,本篇將用例項來展示tomorrow的強大之處。後面文章將對tomorrow的實現原理做進一步的分析。

1.安裝第三方包

pip install requests_html #網路請求包

pip install fake-useragent #獲取useragent包

pip install tomorrow

在這裡我們用20個電影**進行測試,並獲取其標題,計算所用的時間

start=time.time()

for i in url_list:

print(get_xpath(get_req(i),"//title//text()"))

end=time.time()

print("普通方式花費時間",end-start)

get_req是我定義的訪問網路的乙個方法,get_xpath是為例使用xpath表示式獲取其結果,這裡是獲取**的標題。20個電影**普通方式訪問的結果在8-9秒之間。

3使用tomorrow以後

for req in req_list:

print(get_xpath(req, "//title//text()"))

end2 = time.time()

print("併發後花費時間", end2 - start2)

如果我們想要使用tomorrow,就要儘量減少耗時操作,訪問網路並等待其回應就是乙個非常耗時的工作,在這裡我們需要做的是,併發的時候除了訪問網路不要做其他操作,然後我們把獲取的請求存乙個列表,然後再去迴圈做其他操作,看不懂我說的沒關係,直接看下面**並嘗試幾次就明白了。用時為2s-3s

import time

from requests_html import htmlsession

from fake_useragent import useragent as ua

from tomorrow import threads

headers =

session = htmlsession()

url_list = ["",

"","",

"","",

"","",

"","",

"","",

"","","",

"","","",

]def get_req(url, timeout=10):

req = session.get(url, headers=headers, timeout=timeout)

if req.status_code == 200:

return req

@threads(5)

def async_get_req(url, timeout=10):

req = session.get(url, headers=headers, timeout=timeout)

if req.status_code == 200:

return req

def get_xpath(req, xpath_str):

return req.html.xpath(xpath_str)[0].strip().replace("\n", "")

start=time.time()

for i in url_list:

print(get_xpath(get_req(i),"//title//text()"))

end=time.time()

print("普通方式花費時間",end-start)

for req in req_list:

print(get_xpath(req, "//title//text()"))

end2 = time.time()

print("併發後花費時間", end2 - start2)

執行三次上面的程式記錄下每次的結果

第一次:

普通方式花費時間 7.883908271789551

併發後花費時間 2.2888755798339844

第二次:

普通方式花費時間 8.522203207015991

併發後花費時間 2.4674007892608643

第三次:

普通方式花費時間 9.062756061553955

併發後花費時間 2.8703203201293945

tomorrow使用起來很簡單,在普通的函式上面加個threads裝飾器即可以實現併發效果, 括號中的數字是表示併發的次數,經過我的測試並不是併發次數越多越好,你需要選擇乙個中間點,因為還會受到網速的影響,我覺得一般併發數5-10就好.

**自:

PyThon第三方庫

本文 自 戀花蝶的部落格 今天公司停電,沒上班。跑上來更新個部落格,跟大家分享一下我常用的幾個第三方 python 庫。python 語言之所以能夠如此流行,除了本身內建許多程式庫來保障快速開發之外,目不睱接的第三方庫也是一大主因。結合我目前的工作 網遊開發 我常用的幾個第三方庫如下 wxpytho...

python 第三方庫

requests 模組 具體詳見 requests 是用python語言編寫的第三方庫,基於 urllib,採用 apache2 licensed 開源協議的 http 庫。它比 urllib 更加方便,完全滿足 http 測試需求,多用於介面測試 常用介面 1.requests.request m...

python第三方庫

網路爬蟲是自動進行http訪問並獲取html頁面的程式。常用的python網路爬蟲庫 一 requests requests庫是乙個簡潔且簡單的處理http請求的第三方庫,它的最大優點是程式編寫過程更接近正常url訪問 過程。這個庫建立在python語言的urllib3庫基礎上。request庫支援...