標題Python爬蟲—王者榮耀(最詳細)
首先來到王者榮耀的首頁

點擊游戲壁紙進去,就會看到這些圖片,大致看了一下,是我們想要的東西
點開圖片看看能不能找到什么規律

可以看見每張圖下面都有六個解析度的選項,我們點兩個進去看看

19201080的點開,圖片很清晰,我們再點一個其他解析度的

這個是1024768的
我們來看一下url的區別在哪里
1920*1080的url:http://shp.qpic.cn/ishow/2735120117/1606814547_84828260_690_sProdImgNo_6.jpg/0
1024*768的url:http://shp.qpic.cn/ishow/2735120117/1606814546_84828260_690_sProdImgNo_2.jpg/0
其實不難看出,區別在于一個是sProdImgNo_6另一個是sProdImgNo_2
那么他們有什么規律呢?
我們再回去看一下網頁

19201080的位置是第五個
1024768的位置是第一個
sProdImgNo_6在5的位置上
sProdImgNo_2在1的位置上
那么?sProdImgNo_1是什么東西呢?我們去看看

sProdImgNo_1也是一張圖,不過解析度更小了,這樣就有個規律了

不過一張是遠遠不夠的,我們要全部圖片的規律和鏈接
既然找到了東西,我們就可以開分析一下網頁了,來找找資料源在哪里,按F12

經過一番的查找,我們可以看到這個檔案中有一堆json資料,且很像存放圖片的地方

復制這個鏈接,我們打開看看
看到的應該是這樣的

一堆不知名的東西,很頭疼
但是你可以安裝一個瀏覽器插件,來讓它變得更“好看”
它的名字就是 JSON-handle
安裝好之后,你再打開網頁就是這樣的了

是不是就好看多了,看起來也更加清晰了
但是你會發現還是一堆亂七八糟的
為什么呢?因為它用了UrlEncode編碼
不過我們有辦法讓它解碼,讓我們看得懂它

先隨便點一個亂碼,然后單擊右上角的deURL,就變成我們可以看懂的了
逐一去看看,發現的確是我們要的東西,而且這次就不=只是一張圖的鏈接了,是一頁的資料,都在里面

當你的資料找到位置了,現在差不多就可以開始寫代碼了
import re
import time
import requests
# url編碼和解碼
from urllib import parse
import threading
headers = {
# 自行添加
'cookie':'',
'user-agent':'',
}
start = time.time()
try:
count = 0
countPage = 23
for page in range(0, countPage):
url = 'https://apps.game.qq.com/cgi-bin/ams/module/ishow/V1.0/query/workList_inc.cgi?activityId=2735&sVerifyCode=ABCD&sDataType=JSON&iListNum=20&totalpage=0&page={0}&iOrder=0&iSortNumClose=1&jsoncallback=jQuery171049106997163594523_1606960309787&iAMSActivityId=51991&_everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735&_=1606960310077'.format(
page)
response =requests.get(url, headers=headers, timeout= 3)
if response.status_code == 200:
html = response.text
# print(html)
# 正則決議資料
nameList = re.findall(r'"sProdName":(.*?),', html)
urlList = re.findall(r'"sProdImgNo_6":(.*?),', html)
# 回圈讀取總頁數
if page == 1:
cPage = re.findall(r'"iTotalPages":(.*?),', html)
cPage = ''.join(cPage).replace('"','')
countPage = int(cPage)
print('\n第{0}頁\n'.format(page+1))
for name, url in zip(nameList, urlList):
# 解碼、格式化
name = parse.unquote(name).replace('"', '')
url = parse.unquote(url).replace('"', '')[:-3]+ '0'
# 為什么要這么做?經過決議后的url后面是200,會導致部分圖片下載例外,如:后裔-如夢令,所以直接手動改為0
print('{0}、{1} 已獲取!\n'.format((count+1),name))
fileName = name+ '.jpg'
# print(filename)
with open('./pic/' + fileName, 'wb') as file:
img_url = requests.get(url)
# 過濾部分無法訪問圖片
if img_url.status_code ==200:
file.write(img_url.content)
count = count+ 1
print('獲取結束\n本次獲取{0}頁,{1}張圖片!'.format(countPage, count))
except KeyboardInterrupt:
print('非正常退出')
finally:
print('\n本次總耗時{0:.2f}秒\t相當于{1:.2f}分鐘'.format((time.time() - start), (time.time() - start) / 60))
這樣我們就可以開始運行了

僅供參考學習
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/230998.html
標籤:python
