gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚

python視頻教程欄目精煉介紹如何爬取全英雄皮膚。

厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚

免費推薦:python視頻教程

距離上次寫爬蟲文章已經(jīng)過了許久了,之前寫過一篇20行Python代碼爬取王者榮耀全英雄皮膚
,反響強烈,其中有很多同學希望我再寫一篇針對英雄聯(lián)盟官網(wǎng)的皮膚爬取,但苦于事情繁多,便一拖再拖,一直拖到了現(xiàn)在,那么本篇文章我們就一起來學習一下如何爬取英雄聯(lián)盟全英雄皮膚。

爬取代碼非常簡單,從上到下可能只需要寫30行左右就能完成,但重要的是分析過程,在此之前,我們先來了解一下本篇文章需要用到的模塊。

requests模塊介紹

首先是requests模塊,這是一個模擬瀏覽器請求的模塊,我們可以通過它來獲取網(wǎng)頁上的信息,比如百度:

import requests  url = 'http://www.baidu.com'response = requests.get(url)print(response.text)

運行結果:
厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚
通過get函數(shù)就能夠向指定參數(shù)的url發(fā)送請求,得到的response對象中封裝了很多響應的信息,其中的text即為響應內(nèi)容,注意到獲取的內(nèi)容里有亂碼,這是編解碼不一致造成的,只需先獲取二進制數(shù)據(jù),然后重新解碼即可:

import requests  url = 'http://www.baidu.com'response = requests.get(url)print(response.content.decode())

運行結果:
厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚

json模塊

json模塊可以對json字符串和Python數(shù)據(jù)類型進行相互轉換,比如將json轉換為Python對象:

import json  json_str = '{"name":"zhangsan","age":"20"}'rs = json.loads(json_str)print(type(rs))print(rs)

使用loads函數(shù)即可將json字符串轉為字典類型,運行結果:

<class 'dict'> {'name': 'zhangsan', 'age': '20'}

而若是想將Python數(shù)據(jù)轉為json字符串,也非常簡單:

import json  str_dict = {'name': 'zhangsan', 'age': '20'}json_str = json.dumps(str_dict)print(type(json_str))print(json_str)

通過dumps函數(shù)即可將Python數(shù)據(jù)轉為json字符串,運行結果:

<class 'str'> {"name": "zhangsan", "age": "20"}

準備工作

前面介紹了兩個模塊,通過這兩個模塊我們就能夠完成這個程序了。
在正式開始編寫代碼之前,我們首先需要分析數(shù)據(jù)來源,來到官網(wǎng):https://lol.qq.com/main.shtml,往下拉找到英雄列表:
厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚
我們隨意點擊一個英雄進去查看:
厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚
在皮膚圖片上右鍵點擊檢查:厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚
這樣就找到了這個皮膚的url,我們再選擇第二個皮膚,看看它的url:
厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚
我們將安妮所有皮膚的url全部拿出來看看:

https://game.gtimg.cn/images/lol/act/img/skin/big1000.jpg https://game.gtimg.cn/images/lol/act/img/skin/big1001.jpg https://game.gtimg.cn/images/lol/act/img/skin/big1002.jpg https://game.gtimg.cn/images/lol/act/img/skin/big1003.jpg https://game.gtimg.cn/images/lol/act/img/skin/big1004.jpg https://game.gtimg.cn/images/lol/act/img/skin/big1005.jpg https://game.gtimg.cn/images/lol/act/img/skin/big1006.jpg https://game.gtimg.cn/images/lol/act/img/skin/big1007.jpg https://game.gtimg.cn/images/lol/act/img/skin/big1008.jpg https://game.gtimg.cn/images/lol/act/img/skin/big1009.jpg https://game.gtimg.cn/images/lol/act/img/skin/big1010.jpg https://game.gtimg.cn/images/lol/act/img/skin/big1011.jpg https://game.gtimg.cn/images/lol/act/img/skin/big1012.jpg

從這些url中能發(fā)現(xiàn)什么規(guī)律呢?其實規(guī)律非常明顯,url前面的內(nèi)容都是一樣的,唯一不同的是big1000.jpg,而每個皮膚圖片就是在該url的基礎上加1。

那么問題來了,它是如何區(qū)分這張圖片所屬的英雄的呢?我們觀察瀏覽器上方的地址:
厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚
地址上有一個屬性值id為1,那么我們可以猜測一下,皮膚圖片url中的big1000.jpg是不是由英雄id和皮膚id共同組成的呢?

要想證明我們的猜想,就必須再去看看其它英雄皮膚是不是也滿足這一條件:
厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚
打開燼的詳情頁面,其id為202,由此,燼的皮膚圖片url最后部分應為:big ' + 202 + ' 皮膚編號.jpg,所以其url應為:

https://game.gtimg.cn/images/lol/act/img/skin/big202000.jpg https://game.gtimg.cn/images/lol/act/img/skin/big202001.jpg https://game.gtimg.cn/images/lol/act/img/skin/big202002.jpg https://game.gtimg.cn/images/lol/act/img/skin/big202003.jpg https://game.gtimg.cn/images/lol/act/img/skin/big202004.jpg https://game.gtimg.cn/images/lol/act/img/skin/big202005.jpg

事實是不是如此呢?檢查一下便知:
厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚
規(guī)律已經(jīng)找到,但是我們還面臨著諸多問題,比如每個英雄對應的id是多少呢?每個英雄又分別有多少個皮膚呢?

查詢英雄id

先來解決第一個問題,每個英雄對應的id是多少?我們只能從官網(wǎng)首頁中找找線索,在首頁位置打開網(wǎng)絡調(diào)試臺:
厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚
點擊Network,并選中XHR,XHR是瀏覽器與服務器請求數(shù)據(jù)所依賴的對象,所以通過它便能篩選出一些服務器的響應數(shù)據(jù)。
此時我們刷新頁面,在篩選出的內(nèi)容發(fā)現(xiàn)了這么一個東西:
厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚
hero_list,英雄列表?這里面會不會存儲著所有英雄的信息呢?
厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚
點擊右側的Response,得到了一串json字符串,我們將其解析一下:
厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚
這些數(shù)據(jù)里果然存儲的是英雄的信息,包括名字、id、介紹等等,那么接下來我們的任務就是將英雄名字和id單獨提取出來,過濾掉其它信息。

忘了告訴你們了,這個文件的url在這里可以找到:
厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚
接下來開始寫代碼:

import jsonimport requests# 定義一個列表,用于存放英雄名稱和對應的idhero_id = []url = 'https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js?v=20'response = requests.get(url)text = response.text# 將json字符串轉為列表hero_list = json.loads(text)['hero']# 遍歷列表for hero in hero_list:     # 定義一個字典     hero_dict = {'name': hero['name'], 'id': hero['heroId']}     # 將列表加入字典     hero_id.append(hero_dict)print(hero_id)

首先通過requests模塊請求該url,就能夠獲取到一個json字符串,然后使用json模塊將該字符串轉為Python中的列表,最后循環(huán)取出每個英雄的name和heroid屬性,放入新定義的列表中,這個程序就完成了英雄id的提取。

查詢皮膚個數(shù)

接下來解決第二個問題,如何知曉某個英雄究竟有多少個皮膚,按照剛才的思路,我們可以猜測一下,對于皮膚也應該會有一個文件存儲著皮膚信息,在某個英雄的皮膚頁面打開網(wǎng)絡調(diào)試臺,并選中XHR,刷新頁面,找找線索:
厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚
找來找去確實找不到有哪個文件是跟皮膚有關系的,但是這里發(fā)現(xiàn)了一個31.js文件,而當前英雄的id也為31,這真的是巧合嗎?我們將右邊的json字符串解析一下:
厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚
該json數(shù)據(jù)中有一個skins屬性,該屬性值即為當前英雄的皮膚信息,既然找到了數(shù)據(jù),那接下來就好辦了,開始寫代碼:

import jsonimport requests  url = 'https://game.gtimg.cn/images/lol/act/img/js/hero/31.js'response = requests.get(url)text = response.text# 將json字符串轉為列表skins_list = json.loads(text)['skins']skin_num = len(skins_list)

源程序實現(xiàn)

準備工作已經(jīng)完成了我們所有的前置任務,接下來就是在此基礎上編寫代碼了:

import requestsimport jsonimport osimport tracebackfrom tqdm import tqdmdef spider_lol():     # 定義一個列表,用于存放英雄名稱和對應的id     hero_id = []     skins = []     url = 'https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js?v=20'     response = requests.get(url)     text = response.text    # 將json字符串轉為列表     hero_list = json.loads(text)['hero']     # 遍歷列表     for hero in hero_list:         # 定義一個字典         hero_dict = {'name': hero['name'], 'id': hero['heroId']}         # 將列表加入字典         hero_id.append(hero_dict)     # 得到每個英雄對應的id后,即可獲得英雄對應皮膚的url     # 英雄id + 001     # 遍歷列表     for hero in hero_id:         # 得到英雄名字         hero_name = hero['name']         # 得到英雄id         hero_id = hero['id']         # 創(chuàng)建文件夾         os.mkdir('C:/Users/Administrator/Desktop/lol/' + hero_name)         # 進入文件夾         os.chdir('C:/Users/Administrator/Desktop/lol/' + hero_name)         # 得到id后即可拼接存儲該英雄信息的url         hero_info_url = 'https://game.gtimg.cn/images/lol/act/img/js/hero/' + hero_id + '.js'         # 通過訪問該url獲取英雄的皮膚數(shù)量         text = requests.get(hero_info_url).text         info_list = json.loads(text)         # 得到皮膚名稱         skin_info_list = info_list['skins']         skins.clear()         for skin in skin_info_list:             skins.append(skin['name'])         # 獲得皮膚數(shù)量         skins_num = len(skin_info_list)         # 獲得皮膚數(shù)量后,即可拼接皮膚的url,如:安妮的皮膚url為:         # https://game.gtimg.cn/images/lol/act/img/skin/big1000.jpg ~ https://game.gtimg.cn/images/lol/act/img/skin/big1012         s = ''         for i in tqdm(range(skins_num), '正在爬取' + hero_name + '的皮膚'):             if len(str(i)) == 1:                 s = '00' + str(i)             elif len(str(i)) == 2:                 s = '0' + str(i)             elif len(str(i)) == 3:                 pass             try:                 # 拼接皮膚url                 skin_url = 'https://game.gtimg.cn/images/lol/act/img/skin/big' + hero_id + '' + s + '.jpg'                 # 訪問當前皮膚url                 im = requests.get(skin_url)             except:                 # 某些英雄的炫彩皮膚沒有url,所以直接終止當前url的爬取,進入下一個                 continue             # 保存圖片             if im.status_code == 200:                 # 判斷圖片名稱中是否帶有'/'、''                 if '/' in skins[i] or '\' in skins[i]:                     skins[i] = skins[i].replace('/', '')                     skins[i] = skins[i].replace('\', '')                 with open(skins[i] + '.jpg', 'wb') as f:                     f.write(im.content)def main():     try:         spider_lol()     except Exception as  e:         # 打印異常信息         print(e)if __name__ == '__main__':     main()

運行效果:
厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚
運行之前記得在桌面上創(chuàng)建一個lol文件夾,如果想改動的話也可以修改程序:
厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚
程序中還考慮到了一些其它情況,比如在爬取這個皮膚的時候會出現(xiàn)問題:
厲害了,30行python代碼爬取英雄聯(lián)盟全英雄皮膚
因為圖片路徑是以皮膚名字命名的,然而這個皮膚的名字中竟然有個/,它是會影響到我們的圖片保存操作的,所以在保存前將斜杠替換成空字符即可。

還有一個問題就是即使是第一個皮膚,其編號也應該為000而不是0,所以還需要對其進行一個轉化,讓其始終是三位數(shù)。

最后

本篇文章同樣繼承了上篇文章精簡的特點,拋去注釋的話總共30行代碼左右,程序當然還有一些其它地方可以進一步優(yōu)化,這就交給大家自由發(fā)揮了。

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
制服丝袜中文字幕第一页| 在线观看18视频网站| 97xxxxx| 99色精品视频| 欧美日韩亚洲一二三| 在线观看国产中文字幕| 看一级黄色录像| 91好吊色国产欧美日韩在线| 国产精品久久久久9999小说| www.夜夜爽| 福利视频免费在线观看| 国产福利一区视频| 亚洲第一综合网站| 久久精品免费一区二区| www.超碰97.com| 免费看日b视频| 无码少妇一区二区三区芒果| 成人性生交视频免费观看| 91免费版看片| 日韩爱爱小视频| 日韩精品免费一区| 国产麻花豆剧传媒精品mv在线| 国产精品嫩草影视| 日本wwww视频| 男人j进女人j| 伊人影院综合在线| 99爱视频在线| 欧美乱做爰xxxⅹ久久久| 国产又黄又猛又粗又爽的视频| 蜜桃视频成人在线观看| 国产极品美女高潮无套久久久| 久久av喷吹av高潮av| 50路60路老熟妇啪啪| 青春草国产视频| 亚洲成年人专区| 女人高潮一级片| 99热手机在线| 777久久久精品一区二区三区| 天天综合五月天| 中文字幕一区二区在线观看视频| 久久久久久久9| 久久精品一二三四| 深夜黄色小视频| 老熟妇仑乱视频一区二区| 男人添女荫道口图片| 国产美女视频免费| 尤物网站在线看| 男生操女生视频在线观看| 妓院一钑片免看黄大片| 99999精品视频| 成人免费网站入口| 乱熟女高潮一区二区在线| 日韩精品aaa| 九九热视频免费| 日本免费在线视频观看| 最新中文字幕久久| 特级黄色录像片| 黄频视频在线观看| a级网站在线观看| 中文字幕精品在线播放| 日韩精品免费一区| 黄网站色视频免费观看| 免费看日b视频| 国产在线播放观看| 黄色网页免费在线观看| 免费黄色日本网站| 少妇黄色一级片| 亚洲国产精品影视| 粉嫩av一区二区三区天美传媒| 三年中文高清在线观看第6集| 夜夜爽久久精品91| 丁香色欲久久久久久综合网| 国产真实老熟女无套内射| 久久免费视频3| 男人插女人下面免费视频| 91精品无人成人www| 图片区乱熟图片区亚洲| 欧美激情亚洲天堂| 久久久久久久久久久免费视频| 亚洲最大综合网| 在线观看视频黄色| 成人一对一视频| 日韩成人精品视频在线观看| 欧美日韩午夜爽爽| 熟女人妇 成熟妇女系列视频| 亚洲欧美日韩三级| 日韩av新片网| 久久这里只精品| 丰满的少妇愉情hd高清果冻传媒 | 农村妇女精品一二区| 国产精品秘入口18禁麻豆免会员| 在线黄色免费看| 久久99久久99精品| 亚洲黄色av网址| 99久久国产综合精品五月天喷水| 手机看片福利日韩| 色婷婷777777仙踪林| 99爱视频在线| 路边理发店露脸熟妇泻火| 激情六月丁香婷婷| 黑人巨大国产9丨视频| 免费日韩中文字幕| 久久久天堂国产精品| 日本久久久久久久久久久久| 毛片在线视频观看| 欧美视频国产视频| 91传媒久久久| 日韩精品一区二区免费| 亚洲美女性囗交| 午夜dv内射一区二区| 免费一级淫片aaa片毛片a级| 狠狠干狠狠操视频| 亚洲一二三区av| 黄色www网站| 大陆极品少妇内射aaaaaa| 欧美成人三级在线播放| 亚洲熟妇av一区二区三区| 亚洲国产成人精品无码区99| 中文字幕在线视频精品| 欧美伦理片在线看| 97公开免费视频| 人妻少妇被粗大爽9797pw| 久久99中文字幕| www国产无套内射com| 公共露出暴露狂另类av| 日韩av片免费观看| 亚洲欧美日本一区二区| 中文字幕 91| 粉色视频免费看| 亚洲 国产 图片| 交换做爰国语对白| 午夜xxxxx| 麻豆md0077饥渴少妇| 四虎影院一区二区| 日本免费在线视频观看| 日韩av影视大全| 亚洲第一精品区| 超碰97在线看| 日本熟妇人妻xxxx| 大陆极品少妇内射aaaaa| 玩弄中年熟妇正在播放| av天堂永久资源网| www日韩视频| 中文字幕 日韩 欧美| 欧美专区第二页| 日韩亚洲欧美一区二区| a级黄色一级片| 欧美xxxxx在线视频| 亚洲一级免费在线观看| 久久av秘一区二区三区| 成人免费a级片| 欧美 日韩 国产在线观看| av片中文字幕| 两性午夜免费视频| 成人免费毛片在线观看| 99精品视频播放| av噜噜在线观看| 日韩人妻无码精品久久久不卡| 日韩中文字幕三区| 久热在线视频观看| 少妇大叫太大太粗太爽了a片小说| 精品视频在线观看一区| 美女网站免费观看视频| 深夜做爰性大片蜜桃| 日韩小视频在线播放| 亚洲娇小娇小娇小| 真人抽搐一进一出视频| 日本中文字幕高清| 天天爱天天做天天操| 欧美日韩黄色一级片| 欧洲美女亚洲激情| 欧美成人一区二区在线观看| 欧美三级理论片| 无码人妻少妇伦在线电影| 国产一区二区在线免费播放| 欧美国产视频一区| 国产精品久久a| 无码人妻丰满熟妇区96| xxx中文字幕| 中文字幕永久视频| 欧美激情 国产精品| 日本美女久久久| 欧美三级理论片| 777777av| 国产一区 在线播放| 天堂在线一区二区三区| 免费午夜视频在线观看| 欧美黄网在线观看| 91制片厂免费观看| 粉色视频免费看| 午夜免费一区二区| 久久久999免费视频| 精品嫩模一区二区三区| 日本精品一区在线| 人妻丰满熟妇av无码区app| 加勒比成人在线| 国产 欧美 日本| 欧美一级中文字幕| 国产制服91一区二区三区制服| 午夜剧场高清版免费观看|