日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python从网址爬图片协程_python协程gevent案例 爬取斗鱼图片过程解析

發布時間:2023/12/8 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python从网址爬图片协程_python协程gevent案例 爬取斗鱼图片过程解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

分析

分析網站尋找需要的網址

用谷歌瀏覽器摁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": ""

}

測試發現rs16是房間的圖片,如果把鏈接最后的/dy1去掉的話,圖片就成大圖了,心里美滋滋。

代碼實現

import gevent

import json

from urllib import request

from gevent import monkey

# 使用gevent打補丁,耗時操作自動替換成gevent提供的模塊

monkey.patch_all()

# 圖片存放的目錄

ROOT = "./images/"

# 設置請求頭,防止被反爬蟲的第一步

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):

# 把每個鏈接最后的/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从网址爬图片协程_python协程gevent案例 爬取斗鱼图片过程解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。