python协程gevent案例 爬取斗鱼图片过程解析 - python
文章來源: 敏而好學論壇 嗨學網www.piaodoo.com 歡迎大家相互學習
分析
分析網站尋找需要的網址
用谷歌瀏覽器摁F12打開開發者工具,然后打開斗魚顏值分類的頁面,如圖:
在里面的請求中,最后發現它是以ajax加載的數據,數據格式為json,如圖:
圈住的部分是我們需要的數據,然后復制它的網址為https://www.douyu.com/gapi/rknc/directory/yzRec/1,出于學習目的只爬取第一頁(減少服務器壓力)。然后把網址放到瀏覽器中測試是否可以訪問。如圖:
結果正常。
分析json數據,提取圖片鏈接
最后分析發現json中的data里面的rl是每個房間的信息,大概有200條左右,拿出其中的一條查詢里面的圖片鏈接。
{"rid": 1282190,"rn": "大家要開心啊~","uid": 77538371,"nn": "鯨魚歐尼","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": "呆萌鯨魚","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": ""}</pre>測試發現rs16是房間的圖片,如果把鏈接最后的/dy1去掉的話,圖片就成大圖了,心里美滋滋。
代碼實現
def download(img_src):
把每個鏈接最后的/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數據轉換成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”]))
開始下載圖片
gevent.joinall(tasks)
結果
由于使用的是協程,比線程效率更高,不到1秒就把第一頁的圖片全部爬取下來了。效果如圖:
此案例僅用于學習gevent的使用。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
總結
以上是生活随笔為你收集整理的python协程gevent案例 爬取斗鱼图片过程解析 - python的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 车载OS的战场:万亿美金入口之争
- 下一篇: 学习WebDav