Python采集王者皮膚圖片實戰(zhàn)示例
數(shù)據(jù)采集
我們上一篇介紹了,如何采集王者最低戰(zhàn)力,本文就來給大家介紹如何采集王者皮膚,買不起皮膚,當個桌面壁紙挺好的。下面,我和大家介紹如何獲取數(shù)據(jù)。
確定網(wǎng)址
我們在對王者英雄的主頁,進行了分析,我們發(fā)現(xiàn),其網(wǎng)頁地址相似,就差一個數(shù)字。
https://pvp.qq.com/web201605/herodetail/{ename}.shtml
我們可以把它當作為每個英雄的編號,我們可以從英雄列表獲取編號,不過,這里我們直接請求第三方接口數(shù)據(jù)。
獲取英雄編號
html_url ='https://www.sapi.run/hero/getHeroList.php' datas = requests.get(html_url).json()['data'] for data in datas: ename = data['ename'] cname = data['cname'] print(ename,cname)
這段代碼中,html_url
是一個 URL,指向一個 SAPI 的 Hero 列表頁面。requests.get(html_url).json()['data']
返回一個 JSON 對象,其中包含了 Hero 列表頁面的數(shù)據(jù)。ename
和 cname
是 JSON 對象中的兩個鍵值對,分別表示 Hero 的編號
和名字
。
在這段代碼中,我們使用了一個 for
循環(huán)來遍歷 JSON 對象中的每一個鍵值對,并打印出它們的值。這樣就可以得到 Hero 列表頁面中所有 Hero 的編號
和名字
。
獲取皮膚名稱
我們拿到每一個英雄的編號之后,我們就可以訪問每一個英雄的主頁,我們在其主頁可以看到他們的英雄名稱和他們的英雄皮膚的地址。我們先獲取英雄皮膚的名稱。
herodetail_url = f'https://pvp.qq.com/web201605/herodetail/{ename}.shtml' print(herodetail_url) res = requests.get(herodetail_url,headers=headers) res.encoding = 'gbk' # print(res.text) pfs = re.findall('data-imgname="(.*?)"',res.text)[0] pfs=pfs.split('|') print(pfs)
這段代碼中,herodetail_url
是一個 URL,指向一個 Hero 詳細頁面。requests.get(herodetail_url,headers=headers)
返回一個 JSON 對象,其中包含了 Hero 詳細頁面的數(shù)據(jù)。res.encoding = 'gbk'
設置了 JSON 對象的編碼方式為 GBK。re.findall('data-imgname="(.*?)"',res.text)[0]
使用正則表達式匹配 Hero 詳細頁面中的英雄名稱,并返回第一個匹配項。pfs
是匹配項的值,它是一個包含英雄名稱的列表。
接下來,我們對字段進行處理。
for pf in pfs: pf = pf.split('&')[0] # print(pf) pf_list.append(pf) print(len(pf_list)) print(pf_list)
我們得到了這樣的數(shù)據(jù)。['正義爆轟', '地獄巖魂', '無盡征程', '寅虎·御盾']
,到了這里,我們皮膚名字就獲取下來了。
獲取皮膚
pages = len(pfs) for page in range(1,pages+1): pf_url = f'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{ename}/{ename}-bigskin-{page}.jpg' pf_url_list.append(pf_url)
這段代碼中,我們首先計算出 Hero 詳細頁面中圖片的數(shù)量,然后使用 range
函數(shù)生成從 1 到 pages
的整數(shù)序列。接下來,我們使用一個循環(huán)來遍歷這個序列,并將每個圖片的 URL 添加到 pf_url_list
列表中。
最后,我們將 pf_url_list
列表中的所有 URL 連接起來,并將它們作為參數(shù)傳遞給 requests.get()
函數(shù),以獲取 Hero 詳細頁面的數(shù)據(jù)。
到這里,我們把所有皮膚的地址獲取了下來。
保存數(shù)據(jù)
for name,url in zip(pf_list,pf_url_list): path = f'.//皮膚//{cname}//' # print(path) if not os.path.exists(path): os.mkdir(path) # print(cname,name,url) pf_save = requests.get(url,headers=headers) print(f"path + '{name}.jpg'") with open(path + f'{name}.jpg', 'wb') as f: f.write(pf_save.content)
這段代碼中,我們首先將 pf_list
和 pf_url_list
兩個列表進行了 zip
操作,并將結(jié)果存儲在 pf_list
和 pf_url_list
兩個變量中。然后,我們使用 os.path.exists()
函數(shù)來檢查 path
目錄是否存在,如果不存在,則使用 os.mkdir()
函數(shù)創(chuàng)建該目錄。接下來,我們使用 requests.get()
函數(shù)來獲取 pf_url_list
列表中的每個 URL,并將它們作為參數(shù)傳遞給 requests.get()
函數(shù),以獲取 pf_list
列表中的每個 URL。
最后,我們使用 with open()
語句打開 path + '{name}.jpg'
文件,并將 pf_save.content
寫入該文件中。這樣就可以將 pf_list
和 pf_url_list
中的每個 URL 保存到 path + '{name}.jpg'
文件中。
總結(jié)
這是一篇關(guān)于如何采集王者皮膚的文章,介紹了如何從英雄列表獲取編號,并使用正則表達式從網(wǎng)頁地址中提取英雄編號和名字。此外,還介紹了如何使用 requests.get() 函數(shù)從網(wǎng)頁中獲取數(shù)據(jù),以及如何將數(shù)據(jù)保存到文件中。
以上就是Python采集王者皮膚圖片實戰(zhàn)示例的詳細內(nèi)容,更多關(guān)于Python采集王者皮膚圖片的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python2和Python3中@abstractmethod使用方法
這篇文章主要介紹了Python2和Python3中@abstractmethod使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-02-02python實現(xiàn)的陽歷轉(zhuǎn)陰歷(農(nóng)歷)算法
這篇文章主要介紹了python實現(xiàn)的陽歷轉(zhuǎn)陰歷(農(nóng)歷)算法,需要的朋友可以參考下2014-04-04Python 解決logging功能使用過程中遇到的一個問題
這篇文章主要介紹了Python 解決logging功能使用過程中遇到的一個問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04python接口自動化測試數(shù)據(jù)和代碼分離解析
代碼的可維護性除了代碼冗余之外還有就是數(shù)據(jù)盡量不要和代碼摻雜在一起,因為閱讀起來會非常的凌亂;數(shù)據(jù)分離能更好的增加代碼可讀性和可維護性,也能更好的二次修改使用2021-09-09Python 數(shù)據(jù)可視化之Seaborn詳解
這篇文章主要介紹了Python數(shù)據(jù)可視化庫seaborn的使用總結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2021-11-11