爬蟲小程式 - 爬取王者榮耀全皮膚

君莫笑.發表於2020-01-31

學習原因:

爬蟲是一門有趣的技術,它可以讓我們感受到程式的魅力,給我們帶來視覺衝擊感和成就感,可以極大地提高我們對程式設計的學習興趣。
——————
願你我,都能:
遵循君子協議
合理使用技術
提高學習興趣

一. 君子協議

為什麼每次被抓的都有你~

我們應該自覺遵守君子協議(爬蟲協議的俗稱),掌握爬蟲的技術。
在對應網址之後增加 /robots.txt, 即可檢視爬蟲協議,知道哪些頁面是不可爬取的,爬蟲協議具體內容可自行百度瞭解。

例如: https://www.baidu.com/robots.txt
在這裡插入圖片描述

二. 使用者代理

偽裝術,我是平民~

網站可以識別出是程式還是瀏覽器訪問的, 具有反爬蟲措施, 所以需要進行偽裝, 偽裝需要新增使用者代理(User-Agent)

查詢方法1: 網址中輸入 about:version
在這裡插入圖片描述
查詢方法2: 檢視請求頭的中User-Agent

操作流程:在任意頁面,比如:百度搜尋頁,首先點一下滑鼠右鍵,點選檢查。接著,點選Network,點選頁面重新整理,在Name下點選任意一條,比如:www.baidu.com。最後,在Headers中滑到最下方,找到User-Agent,複製使用者代理。
在這裡插入圖片描述

三,爬蟲程式碼:

流程:

  1. 明確目標,爬取王者榮耀全皮膚;
  2. 分析過程,進網站通過抓包瞭解皮膚圖片的儲存位置;
  3. 拆解步驟,找出皮膚圖片的儲存規律,把實現步驟拆解成若干個;
  4. 逐步執行,獲取需要的引數,完善程式碼;

注意事項:

  • 新增使用者代理,進行偽裝
  • 新建同級資料夾pic,方便儲存皮膚圖片;
  • 加快執行效率,可參考提高爬蟲效率的技術
  • 具體操作流程,可參考其他文章資源,此處只有效果

檔案構架:

# 第一層:
mySpider(總資料夾,用來練習爬蟲技術)
# 第二層:
--pic(資料夾,用來儲存皮膚圖片)
--rongyao.py(python檔案,用來爬取榮耀全皮膚)

程式碼:

執行條件:程式碼中新增使用者代理,總資料夾下新建pic資料夾(要與python檔案在同一級哦)。

# 1.匯入所需模組
import requests


# 2.讀取json檔案
url = 'http://pvp.qq.com/web201605/js/herolist.json'
headers = {'User-Agent':'此處省略,替換成自己的使用者代理'} # 新增使用者代理
response = requests.get(url, headers=headers)
json_list= response.json()

# print(len(json_list)) # 英雄總數量:95個英雄
# print(json_list) # 列印結果,瞭解json_list的構造

try:
    # 3.提取json檔案,下載圖片
    for m in range(len(json_list)):
        # 英雄編號
        hero_num = json_list[m]['ename']
        # 英雄名稱
        hero_name = json_list[m]['cname']
        # 獲取皮膚列表
        skin_name = json_list[m]['skin_name'].split('|')
        # 統計皮膚數量
        skin_count = len(skin_name)
        print('英雄名稱:',hero_name,' 皮膚數量:',skin_count) # 列印英雄的皮膚數量

        # 遍歷每一個圖片網址
        for i in range(1, skin_count + 1):
            # 網址拼接, 構造完整的圖片網址
            url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' # 圖片網址固定字首
            url_pic = url + str(hero_num) + '/' + str(hero_num) + '-bigskin-' + str(i) + '.jpg'
            # 獲取圖片資訊
            picture = requests.get(url_pic).content
            # print(picture) # 列印圖片網址
            # 下載圖片 檔案路徑為: pic/英雄名-皮膚名.jpg (需要新建pic資料夾)
            with open('pic/'+ hero_name + ' - ' + skin_name[i - 1] + '.jpg', 'wb') as f:
                f.write(picture)
except KeyError as e:
    # 捕獲異常:解決皮膚名稱全部列印完成後會報錯的問題
    print('程式執行完畢!')
            

最終結果:
在這裡插入圖片描述

四,python檔案打包技術:

已將python檔案轉為exe可執行檔案,下載後執行exe檔案即可,例如:我們的電腦桌面的那些應用就是一個個exe檔案。其中使用的python檔案打包技術(下面提供跳轉連結),比較簡單,成功後可用像電腦軟體一樣直接執行在後臺,也方便分享給小夥伴哦。

>> 爬蟲程式下載連結,如下:

連結:https://pan.baidu.com/s/1L7DTYzkv_zRqX9zyAEZwhw
提取碼:0kzw
複製這段內容後開啟百度網盤手機App,操作更方便哦

在這裡插入圖片描述
由於多人頻繁使用,該程式可能已失效,在這僅作參考,建議自行將python檔案打包成可執行檔案。
想要學習python檔案打包技術,點選右邊的連結即可:python檔案打包技術

五,提高爬蟲效率的方法

普通的程式碼爬取資料的效率較低,若資料變多,那麼等待時間會大大加長,如何縮短爬取資料的時間,我們可以瞭解一些提高爬蟲效率的方法。

以上實現了檔案打包,直接在電腦上執行即可,無需使用python編輯器~

更多方法請點選跳轉:提高爬蟲效率的方法

相關文章