用python的requests第三方模組抓取王者榮耀所有英雄的皮膚

來源:互聯網
上載者:User

標籤:src   user   content   port   for   第三方模組   多線程   auth   idt   

本文使用python的第三方模組requests爬取王者榮耀所有英雄的圖片,並將圖片按每個英雄為一個目錄存入檔案夾中,方便用作案頭壁紙

下面時具體的代碼,已通過python3.6測試,可以成功運行:

對於所要爬取的網頁串連可以通過王者榮耀官網找到,

  1 # -*- coding: utf-8 -*-  2 """  3 Created on Wed Dec 13 13:49:52 2017  4   5 @author:KillerTwo  6 """  7 import requests  8 import os  9 hero_list_url = ‘http://pvp.qq.com/web201605/js/herolist.json‘ 10 hero_skin_root_url = ‘http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/‘ 11 skin_base_dir = ‘C:\\Users\\lwt27\\Pictures\\image\\heroskin\\‘ 12  13  14 def get_ename(hero_json):#傳入擷取到的python對象,如hero_list_json 15     ‘‘‘擷取英雄名稱對應英雄編號的一個字典,例如{小喬:106,...}‘‘‘ 16     cname_ename = {} 17     for hero in hero_json: 18         cname_ename[hero[‘cname‘]] = hero[‘ename‘] 19     return cname_ename 20  21 def get_skin_name(hero_json): #傳入從網頁擷取到的json轉換為python字典的對象 22     ‘‘‘擷取英雄名稱對應的皮膚的所有皮膚名稱的字典,例如 23     {‘小喬‘:‘戀之微風|萬聖前夜|天鵝之夢|純白花嫁|繽紛獨角獸‘,...}‘‘‘ 24     cname_skin_name = {} 25     for hero in hero_json: 26         cname_skin_name[hero[‘cname‘]] = hero[‘skin_name‘] 27     return cname_skin_name 28  29 def get_hero_skin_count(cname_skin_name): #傳入英雄名稱對應皮膚名稱的字典 30     ‘‘‘擷取每個英雄對應的皮膚的個數,例如{‘小喬‘:5,...}‘‘‘ 31     cname_skin_count = {}  32     for item in cname_skin_name.items(): 33         cname_skin_count[item[0]] = len(item[1].split(‘|‘)) 34     return cname_skin_count 35  36 def get_skin_name_url(skin_base_rul,cname_skin_count,cname_ename): 37     #傳入皮膚根地址和名稱對應皮膚數量的字典和名稱對應編號的字典 38     ‘‘‘返回英雄名稱對應的所有皮膚的url地址清單的字典,例如{小喬:[skin_url1,skin_url2],...}‘‘‘ 39     cname_url_list = {} 40     for cname,count in cname_skin_count.items(): 41         #print(cname) 42         #print(count) 43         #print(skin_base_rul) 44         #print(cname_ename[cname]) 45         base_url = skin_base_rul+str(cname_ename[cname])+‘/‘+str(cname_ename[cname])+‘-bigskin-‘ 46         #print(base_url) 47         skin_url_list = [str(base_url)+str(num)+‘.jpg‘ for num in range(1,count+1)] 48         cname_url_list[cname] = skin_url_list 49     return cname_url_list 50  51 #print() 52 d = get_skin_name_url(hero_skin_root_url,get_hero_skin_count(get_skin_name(hero_list_json)),get_ename(hero_list_json)) 53 #print(d) 54  55 def get_cname_skin_name(cname_skin_name):#傳入名稱對應皮膚名稱字串的字典 56     cname_skin_name_dict = {}         #返回名稱對應【皮膚名稱的列表】的字典 57     for cname,skin_name_list in cname_skin_name.items(): 58         skin_list = [name for name in skin_name_list.split(‘|‘)] 59         cname_skin_name_dict[cname] = skin_list 60     return cname_skin_name_dict 61      62 #s = get_skin_name(hero_list_json) 63 #print(s) 64 #f = get_cname_skin_name(s) 65 #print(f) 66  67 def get_hero_skin(cname_url_list,cname_skin_name):#傳入名稱對應【皮膚名稱列表】的字典和名稱對應皮膚url列表的字典 68    # """擷取每個英雄的圖片""" 69     for cname,skin_url in cname_url_list.items(): 70          71         if mkdir(skin_base_dir+cname):#建立指定目錄 72             os.chdir(skin_base_dir+cname)  #進入到建立的目錄 73              74             for i in range(len(skin_url)): 75                 file_name = cname_skin_name[cname][i]+‘.jpg‘ 76                 r = requests.get(skin_url[i]) 77                 with open(file_name,‘wb‘) as f: 78                     f.write(r.content) 79 #建立目錄 80 def mkdir(path): 81     # 引入模組 82     import os 83     # 去除首位空格 84     path=path.strip() 85     # 去除尾部 \ 符號 86     path=path.rstrip("\\") 87     # 判斷路徑是否存在 88     # 存在     True 89     # 不存在   False 90     isExists=os.path.exists(path) 91     # 判斷結果 92     if not isExists: 93         # 如果不存在則建立目錄 94         # 建立目錄操作函數 95         os.makedirs(path) 96         print(path+‘ 建立成功‘) 97         return True 98     else: 99         # 如果目錄存在則不建立,並提示目錄已存在100         print(path+‘ 目錄已存在‘)101         return False102     return 103 104 if __name__ == ‘__main__‘:105     106     hero_list_body = requests.get(hero_list_url) #請求英雄列表107     hero_list_json = hero_list_body.json()  #將英雄列表的擷取的json資料轉換為python對象108 109     cname_ename = {}       #英雄名稱對應英雄編號的字典110     cname__skin_name = {} #英雄名稱對應皮膚名稱字串的字典111     cname_skin_count = {} #英雄名稱對應皮膚數量的字典112     113     cname_skin_name_str_list = get_skin_name(hero_list_json)114     cname_skin_name_list = get_cname_skin_name(cname_skin_name_str_list)115     cname_skin_count = get_hero_skin_count(cname_skin_name_str_list)116     cname_ename = get_ename(hero_list_json)117     cnam_skin_url_list = get_skin_name_url(hero_skin_root_url,cname_skin_count,cname_ename)118     get_hero_skin(cnam_skin_url_list,cname_skin_name_list)

下面是儲存抓取到的圖片的檔案夾範例:

以上就是抓取王者榮耀所有英雄皮膚的簡單樣本,上述的代碼並沒有使用python多線程執行抓取圖片的函數,所以在執行的時候可能需要花費幾分鐘的時間,

以後在進行改進,添加使用python多線程執行抓取任務。

 

用python的requests第三方模組抓取王者榮耀所有英雄的皮膚

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.