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