這篇文章主要介紹了python中協(xié)程gevent的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
分析
分析網(wǎng)站尋找需要的網(wǎng)址
用谷歌瀏覽器摁F12打開(kāi)開(kāi)發(fā)者工具,然后打開(kāi)斗魚(yú)顏值分類(lèi)的頁(yè)面,如圖:
在里面的請(qǐng)求中,最后發(fā)現(xiàn)它是以ajax加載的數(shù)據(jù),數(shù)據(jù)格式為json,如圖:
圈住的部分是我們需要的數(shù)據(jù),然后復(fù)制它的網(wǎng)址為https://www.douyu.com/gapi/rknc/directory/yzRec/1,出于學(xué)習(xí)目的只爬取第一頁(yè)(減少服務(wù)器壓力)。然后把網(wǎng)址放到瀏覽器中測(cè)試是否可以訪問(wèn)。如圖:
結(jié)果正常。
分析json數(shù)據(jù),提取圖片鏈接
最后分析發(fā)現(xiàn)json中的data里面的rl是每個(gè)房間的信息,大概有200條左右,拿出其中的一條查詢(xún)里面的圖片鏈接。
{ "rid": 1282190, "rn": "大家要開(kāi)心啊~", "uid": 77538371, "nn": "鯨魚(yú)歐尼", "cid1": 8, "cid2": 201, "cid3": 581, "iv": 1, "av": "avatar_v3/201908/d62c503c603945098f2c22d0d95c3b2e", "ol": 610574, "url": "/1282190", "c2url": "/directory/game/yz", "c2name": "顏值", "icdata": { "217": { "url": "https://sta-op.douyucdn.cn/dy-listicon/king-web.png-v3.png", "w": 0, "h": 0 } }, "dot": 2103, "subrt": 0, "topid": 0, "bid": 0, "gldid": 0, "rs1": "https://rpic.douyucdn.cn/live-cover/appCovers/2019/08/01/1282190_20190801002745_big.jpg/dy1", "rs16": "https://rpic.douyucdn.cn/live-cover/appCovers/2019/08/01/1282190_20190801002745_small.jpg/dy1", "utag": [ { "name": "呆萌鯨魚(yú)", "id": 111405 }, { "name": "美美美", "id": 41 }, { "name": "萌萌噠", "id": 520 }, { "name": "刀神老婆", "id": 132367 } ], "rpos": 0, "rgrpt": 1, "rkic": "", "rt": 2103, "ot": 0, "clis": 1, "chanid": 0, "icv1": [ [ { "id": 217, "url": "https://sta-op.douyucdn.cn/dy-listicon/web-king-1-10-v3.png", "score": 994, "w": 0, "h": 0 } ], [ ], [ ], [ ] ], "ioa": 0, "od": "" }
測(cè)試發(fā)現(xiàn)rs16是房間的圖片,如果把鏈接最后的/dy1去掉的話(huà),圖片就成大圖了,心里美滋滋。
代碼實(shí)現(xiàn)
import gevent import json from urllib import request from gevent import monkey # 使用gevent打補(bǔ)丁,耗時(shí)操作自動(dòng)替換成gevent提供的模塊 monkey.patch_all() # 圖片存放的目錄 ROOT = "./images/" # 設(shè)置請(qǐng)求頭,防止被反爬蟲(chóng)的第一步 header = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 " } def download(img_src): # 把每個(gè)鏈接最后的/dy1去掉 img_src: str = img_src.replace("/dy1", "") # 提取圖片名 file_name: str = img_src.split("/")[-1] response = request.urlopen(request.Request(img_src, headers=header)) # 保存到本地 with open(ROOT + file_name, "wb") as f: f.write(response.read()) print(file_name, "下載完成!") if __name__ == '__main__': req = request.Request("https://www.douyu.com/gapi/rknc/directory/yzRec/1", headers=header) # 把json數(shù)據(jù)轉(zhuǎn)換成python中的字典 json_obj = json.loads(request.urlopen(req).read().decode("utf-8")) tasks = [] for src in json_obj["data"]["rl"]: tasks.append(gevent.spawn(download, src["rs16"])) # 開(kāi)始下載圖片 gevent.joinall(tasks)
結(jié)果
由于使用的是協(xié)程,比線程效率更高,不到1秒就把第一頁(yè)的圖片全部爬取下來(lái)了。效果如圖:
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“python中協(xié)程gevent的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司,關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、網(wǎng)站設(shè)計(jì)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
本文題目:python中協(xié)程gevent的示例分析-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://chinadenli.net/article24/dcjjce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、網(wǎng)站排名、搜索引擎優(yōu)化、網(wǎng)站改版、用戶(hù)體驗(yàn)、App開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容