中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python練手項目:20行爬取全王者全英雄皮膚

發布時間:2020-07-07 22:41:32 來源:網絡 閱讀:263 作者:wx5dda9494d81d2 欄目:編程語言

引言

   王者榮耀大家都玩過吧,沒玩過的也應該聽說過,作為時下最火的手機MOBA游戲,咳咳,好像跑題了。我們今天的重點是爬取王者榮耀所有英雄的所有皮膚,而且僅僅使用20行Python代碼即可完成。
   文中源代碼在文章末尾,可自行復制粘貼。

準備工作

   爬取皮膚本身并不難,難點在于分析,我們首先得得到皮膚圖片的url地址,話不多說,我們馬上來到王者榮耀的官網:
Python練手項目:20行爬取全王者全英雄皮膚

   我們點擊英雄資料,然后隨意地選擇一位英雄,接著F12打開調試臺,找到英雄原皮膚的圖片地址:
Python練手項目:20行爬取全王者全英雄皮膚

   接著,我們切換一下英雄的皮膚,會發現圖片地址沒有明顯的變化,只是最后的數字序號改變了,我們將兩個皮膚圖片的地址放在一起比較一下:

http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/523/523-bigskin-1.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/523/523-bigskin-2.jpg

   我們可以猜測,對于同一個英雄的皮膚圖片地址,僅僅是最后的數字序號不同,為了證實我們的猜想,我們可以繼續找出一個英雄的全皮膚圖片,找一個皮膚多一點的,例如我這里找的是孫尚香,將它的所有皮膚圖片地址放在一起比較:

http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-1.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-2.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-3.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-4.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-5.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-6.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-7.jpg

   由此我們得出結論,同一個英雄的皮膚圖片路徑從1開始依次遞增,我們再來看看不同英雄之間是如何區分的。會發現,不管皮膚圖片如何改變,瀏覽器上方的地址始終是不變的,所以我們將兩個不同英雄的url地址放到一起比較一下:

https://pvp.qq.com/web201605/herodetail/523.shtml
https://pvp.qq.com/web201605/herodetail/111.shtml

   乍一看,似乎沒有什么規律,但我們要從這里發現一點,就是最后的數字其實控制的是哪個英雄,我們暫且認為它是英雄的編號,可不幸的是,英雄編號之間好像沒有什么規律,不用著急,我們再到官網上找找線索。

在英雄資料界面,我們打開F12調試臺,通過抓取網絡請求,我發現了幾個文件:
Python練手項目:20行爬取全王者全英雄皮膚

   點擊網絡,然后點擊XHR,就可以看到這幾個文件,看到文件的名字大家應該就清楚了,這些文件存儲的就是英雄列表信息,我們點擊查看一下:
在這里插入圖片描述
   沒錯,這里存儲的就是英雄信息,包括英雄的名字,英雄編號等等其它信息,我們可以試試這些信息的準確性,例如小喬的ename,也就是英雄編號為106,所以按照之前的想法,英雄小喬的詳情地址應為:https://pvp.qq.com/web201605/herodetail/106.shtml
經過嘗試后發現確實如此。

   到這里,準備工作就完成了,其實進行到這里,整個工程就完成了一半了,接下來就是代碼的實現了。

代碼實現

   首先我們創建一個Python文件,然后導入osrequests模塊。
按照前面的步驟,我們首先需要獲取到英雄列表信息,也就是herolist.json文件,文件地址為:https://pvp.qq.com/web201605/js/herolist.json,這在調試臺中可以找到。
那么我們首先就要通過這個地址獲取到英雄列表信息的json數據,然后解析json數據,將有用的信息提取出來:

url = 'https://pvp.qq.com/web201605/js/herolist.json'
herolist = requests.get(url)  # 獲取英雄列表json文件

herolist_json = herolist.json()  # 轉化為json格式
hero_name = list(map(lambda x: x['cname'], herolist.json()))  # 提取英雄的名字
hero_number = list(map(lambda x: x['ename'], herolist.json()))  # 提取英雄的編號

   這樣我們就獲取到了英雄名字和編號,可以輸出測試一下:
拿到了英雄編號之后,事情就變得很簡單了,只需拼接一下url地址即可:
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + hero_number + '/' + hero_number + '-bigskin-1.jpg,這樣可以獲取到所有英雄的皮膚圖片了,但是這里會有一個問題,英雄的皮膚是有多有少的,有的英雄只有兩個皮膚,有的卻有六七個,所以圖片編號的最大值我們并不清楚,這里我采用了一個比較笨的辦法,就是讓一個變量從1到10依次遞增去拼接圖片地址,如果遇到沒有的圖片我們就不處理,因為沒有一個英雄的皮膚超過了10個,所以我們就能獲取到所有的圖片了。下面看代碼實現:

# 下載圖片
def downloadPic():
    i = 0
    for j in hero_number:
        # 創建文件夾
        os.mkdir("C:\\Users\\Administrator\\Desktop\\wzry\\" + hero_name[i])
        # 進入創建好的文件夾
        os.chdir("C:\\Users\\Administrator\\Desktop\\wzry\\" + hero_name[i])
        i += 1
        for k in range(10):
            # 拼接url
            onehero_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(j) + '/' + str(
                j) + '-bigskin-' + str(k) + '.jpg'
            im = requests.get(onehero_link)  # 請求url
            if im.status_code == 200:
                open(str(k) + '.jpg', 'wb').write(im.content)  # 寫入文件

   實現非常地簡單,代碼注釋也已經寫得很清楚了,有了這個函數之后,我們只需調用一下,就可以下載圖片了,整個程序的完整代碼如下:

import os
import requests

# python0基礎小白加群:456926667,獲取更多的python練手項目、練習,以及學習交流。

url = 'https://pvp.qq.com/web201605/js/herolist.json'
herolist = requests.get(url)  # 獲取英雄列表json文件

herolist_json = herolist.json()  # 轉化為json格式
hero_name = list(map(lambda x: x['cname'], herolist.json()))  # 提取英雄的名字
hero_number = list(map(lambda x: x['ename'], herolist.json()))  # 提取英雄的編號

# 下載圖片
def downloadPic():
    i = 0
    for j in hero_number:
        # 創建文件夾
        os.mkdir("C:\\Users\\Administrator\\Desktop\\wzry\\" + hero_name[i])
        # 進入創建好的文件夾
        os.chdir("C:\\Users\\Administrator\\Desktop\\wzry\\" + hero_name[i])
        i += 1
        for k in range(10):
            # 拼接url
            onehero_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(j) + '/' + str(
                j) + '-bigskin-' + str(k) + '.jpg'
            im = requests.get(onehero_link)  # 請求url
            if im.status_code == 200:
                open(str(k) + '.jpg', 'wb').write(im.content)  # 寫入文件

downloadPic()

   除去注釋,接近20行的代碼我們就完成了王者榮耀全英雄皮膚的爬取,是不是非常簡單呢?我們可以測試一下這個程序,首先要在桌面上創建一個文件夾,名為wzry,因為這里的代碼我已經寫死了,如果要修改的話大家也可以進行修改,文件夾創建完成后點擊運行即可,等待片刻,圖片就全部下載完成了。
Python練手項目:20行爬取全王者全英雄皮膚

Python練手項目:20行爬取全王者全英雄皮膚

Python練手項目:20行爬取全王者全英雄皮膚

   對于程序中json字符串的解析,我們還可以使用jsonpath模塊來進行,使用該模塊能夠更加快捷地獲取到我們想要的信息,解析方式如下:

hero_name = jsonpath.jsonpath(html_json, "$..cname")
hero_number = jsonpath.jsonpath(html_json, "$..ename")

   該方法接收一個json字符串和解析規則,$…cname則表示從根目錄下找尋任意位置的以cname為鍵的值,并放入字典中。
結尾

   爬蟲是非常有趣的,因為它非常直觀,視覺沖擊感強,寫出來也很有成就感,爬蟲雖然強大,但千萬不能隨意爬取隱私信息。

   最后,如果對文中程序有更好的建議,歡迎評論區留言。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙岩市| 青浦区| 西峡县| 峨边| 二手房| 江口县| 金寨县| 务川| 宕昌县| 内乡县| 江安县| 历史| 新安县| 大港区| 沁水县| 长葛市| 崇州市| 岳普湖县| 广饶县| 文昌市| 吉木乃县| 顺平县| 泰州市| 丹东市| 山西省| 宁蒗| 城口县| 耒阳市| 永吉县| 开化县| 读书| 绿春县| 定远县| 中宁县| 阜康市| 荣昌县| 榆社县| 东阿县| 寻甸| 溧水县| 临桂县|