嗨嘍,大家好呀~這里是愛看美女的茜茜吶
環(huán)境使用:
Python 3.10
Pycharm
模塊使用:
requests —> 數(shù)據(jù)請求模塊 需要安裝 pip install requests
re 正則表達(dá)式 內(nèi)置模塊 不需要安裝
os 文件操作模塊 內(nèi)置模塊 不需要安裝
如何安裝python第三方模塊:
win + R 輸入 cmd 點擊確定, 輸入安裝命令 pip install 模塊名 (pip install requests) 回車
在pycharm中點擊Terminal(終端) 輸入安裝命令
案例分為兩部分:
選擇英雄皮膚圖片下載
對應(yīng)所有英雄數(shù)據(jù)進(jìn)行下載
案例基本思路流程:
一. 數(shù)據(jù)來源分析
-
明確需求: 明確采集的網(wǎng)站以及數(shù)據(jù)
網(wǎng)址: 妲己 https://pvp.qq.com/web201605/herodetail/109.shtml
數(shù)據(jù): 所有皮膚圖片+昵稱
-
抓包分析: 皮膚圖片
通過開發(fā)者工具分析圖片鏈接是什么樣子, 怎么構(gòu)成 怎么生成
打開開發(fā)者工具: F12 / 右鍵點擊檢查選擇 network (網(wǎng)絡(luò))
-
刷新網(wǎng)頁: 讓本網(wǎng)頁的數(shù)據(jù)內(nèi)容重新加載一遍
比如動態(tài)網(wǎng)頁: 點擊第二頁/下一頁數(shù)據(jù), 下滑頁面加載新的頁面的內(nèi)容
-
分析圖片鏈接是什么樣子的…
圖片鏈接: https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/109/109-bigskin-{1~10}.jpg
昵稱: 通過關(guān)鍵詞去搜索對應(yīng)位置
https://pvp.qq.com/web201605/herodetail/109.shtml
二. 代碼實現(xiàn)步驟
-
發(fā)送請求 -> 模擬瀏覽器對于url地址發(fā)送請求
請求網(wǎng)址: https://pvp.qq.com/web201605/herodetail/109.shtml
-
獲取數(shù)據(jù) -> 服務(wù)器返回響應(yīng)數(shù)據(jù)
開發(fā)者工具: 響應(yīng) response
解析數(shù)據(jù) -> 提取我們需要皮膚昵稱 以及 構(gòu)建圖片鏈接地址
保存數(shù)據(jù) -> 獲取圖片數(shù)據(jù), 保存本地文件夾
-
全英雄皮膚圖片下載 & 每個英雄單獨放在一個文件夾里面
-
對比采集不同英雄鏈接參數(shù)變化是什么樣子的
妲己:
小喬:
英雄ID的變化:
妲己 -> 109 小喬 -> 106 廉頗 -> 105
只需要所有到所有英雄ID就可以獲取的所有英雄皮膚圖片
https://pvp.qq.com/web201605/js/herolist.json
-
代碼展示
# 導(dǎo)入數(shù)據(jù)請求模塊 <需要安裝>
import requests
# 導(dǎo)入正則表達(dá)式模塊 <內(nèi)置模塊>
import re
# 導(dǎo)入文件操作模塊 <內(nèi)置模塊>
import os
“”"
發(fā)送請求
-
模擬瀏覽器對于url地址發(fā)送請求
<Response [200]> 響應(yīng)對象, 表示請求成功
“”"
# 模擬偽裝 <請求頭>
headers = {
# User-Agent 用戶代理 表示瀏覽器基本身份信息
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}
# 請求網(wǎng)址:
link = 'https://pvp.qq.com/web201605/js/herolist.json'
# 發(fā)送請求
json_data = requests.get(url=link, headers=headers).json()
for index in json_data:
hero_id = index['ename']
hero_name = index['cname']
print(hero_name, hero_id)
filename = f'img\\{hero_name}\\'
if not os.path.exists(filename):
os.makedirs(filename)
# 請求網(wǎng)址
url = f'https://pvp.qq.com/web201605/herodetail/{hero_id}.shtml'
# 發(fā)送請求
response = requests.get(url=url, headers=headers)
“”"
獲取數(shù)據(jù)
response.text 獲取響應(yīng)文本數(shù)據(jù)
-
當(dāng)獲取文本數(shù)據(jù)時, 發(fā)生亂碼如何解決?
解決方法: 改編碼
“”"
# 改編碼
response.encoding = response.apparent_encoding
html_data = response.text
“”"
解析數(shù)據(jù)
- re.findall(‘匹配的數(shù)據(jù)’, ‘?dāng)?shù)據(jù)源’)
“”"
info = re.findall('data-imgname="(.*?)">', html_data)[0].split('|')
# 構(gòu)建圖片鏈接地址 len(info) 統(tǒng)計元素個數(shù)
for i in range(len(info)): # i -> 0-9
img = f'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{hero_id}/{hero_id}-bigskin-{i+1}.jpg'
title = info[i].split('&')[0] # 列表索引位置取值
print(img, title)
“”"
保存數(shù)據(jù)
“”"
# 獲取圖片內(nèi)容
img_content = requests.get(url=img, headers=headers).content
with open(filename + title + '.jpg', mode='wb') as f:
f.write(img_content)
圖片展示
尾語
感謝你觀看我的文章吶~本次航班到這里就結(jié)束啦 ??
希望本篇文章有對你帶來幫助 ??朵你,有學(xué)習(xí)到一點知識~
躲起來的星星??也在努力發(fā)光,你也要努力加油(讓我們一起努力叭)寓娩。