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

来源:http://www.cnblogs.com/yourblog/archive/2017/12/13/8035180.html
-Advertisement-
Play Games

本文使用python的第三方模塊requests爬取王者榮耀所有英雄的圖片,並將圖片按每個英雄為一個目錄存入文件夾中,方便用作桌面壁紙 下麵時具體的代碼,已通過python3.6測試,可以成功運行: 對於所要爬取的網頁連接可以通過王者榮耀官網找到, 下麵是保存抓取到的圖片的文件夾樣例: 以上就是抓取 ...


本文使用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 False
102     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多線程執行抓取任務。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 操作文件時,一般需要經歷如下步驟: 打開文件操作文件 一、打開文件: 註:python中打開文件有兩種方式,即:open(...) 和 file(...) ,本質上前者在內部會調用後者來進行文件操作,推薦使用 open。 打開文件時,需要指定文件路徑和以何等方式打開文件,打開後,即可獲取該文件句柄, ...
  • 1、引用數據類型 格式:數據類型 變數名 = new 數據類型(); 每個引用類型都有自己的功能,如何使用功能? 格式:變數.方法名,如sc.nextInt(); 接收鍵盤輸入,保證輸入的是整數,否則Exception(異常) Scanner的另外一個功能 next() 接收鍵盤輸入的字元串 ①Sc ...
  • 最近在網上找到一個逆向分析挑戰的網站,http://flare-on.com/。在這裡可以下載到該網站出的一系列的逆向分析的題目,我下載了2017年的練習,總共12道題目。最近想把這些題目的結題過程寫下來,當做一些積累吧。 第一道題目是一個網頁題目,開始就給了一個login.html文件 用文本編輯 ...
  • code: RX: 解決辦法: 將第十一行的代碼改為: ...
  • 由於工作需要。記錄了使用方法。理論等在後續補充。 本人對於selenium的理解:作為python的一個第三方庫,用於Web自動化處理的工具。 一、selenium元素定位 Selenium提供了8種定位方式。 id name class name tag name link text partia ...
  • 數據類型的種類 常用的:1、數字2、字元串3、列表4、元祖5、集合 不常用的:隊列有序字典預設字典 集合的特點 1、無序 2、去重(重要) 3、可嵌套 4、關係測試(重要) 創建集合 一、創建集合的註意事項: 1、無序,不重覆的序列 2、用“{}”來代替,裡面每個元素就是一個值,跟字典的區別就是無需 ...
  • 原創不易,轉載請標明出處。上一篇《Java實驗--基於Swing的簡單的歌曲信息管理系統(一)》講解瞭如何這個小項目的具體情況和主要功能,下麵進入編碼階段。 在eclipse中新建java項目,項目的結構如下: 資料庫的設計 該項目簡單,只涉及到了兩種表,且沒有涉及到關聯查詢,就只是對單表進行操作。 ...
  • 字典的概念 字典是存儲數據的一種方式,與列表和元祖來說更靈活。元祖的局限性:值是無序,不可變的列表的局限性:如果裡面想存儲一個人的名字對應的值時dy,年齡對應的是30。使用一個列表是不行的如下: 1 >>> t=[name="dy",age=30] 2 File "<stdin>", line 1 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...