最簡單的python爬蟲實戰——爬取王者榮耀皮膚及頭像

看到某公衆號的一篇非常容易上手的爬蟲實例,之前只是模擬登陸過,還沒有爬取過數據或者文件,一直沒怎麼接觸過json這個東西,發現也沒有那麼難上手,233333,總之是一次非常愉快的爬蟲經歷,簡單又簡潔的代碼,就可以獲取到所需要的信息。

urllib庫的用法:

urllib.request.urlopen()   #打開某網址
urllib.request.urlrestrive(url,save_file_name)   #將遠程數據下載到本地
urlretrieve(url, filename=None, reporthook=None, data=None)
#詳細:reporthook,調用函數返回下載進度
#data,post到服務器的數據,該方法返回一個包含兩個元素的(filename, headers)元組,filename 表示保存到本地的路徑,header 表示服務器的響應頭。

reporthook的用法:

def callback(blocknum,blocksize,totalsize) //定義回傳的函數

函數會傳入三個參數:

  1. 到現在傳輸的塊數 blocknum.
  2. 每一塊的大小 blocksize.
  3. 文件總大小 totalsize.

json的用法:

json.loads()   #從json中提取數據, 將str類型的數據轉成dict


解決了一些小問題,完整代碼就寫出來了~

#-*- coding:utf-8 -*-
import urllib.request
import json

respond = urllib.request.urlopen("http://pvp.qq.com/web201605/js/herolist.json")

json_hero = json.loads(respond.read().decode('utf-8'))   //read()讀取網址並解碼
hero_num = len(json_hero)

def callback(blocknum,blocksize,totalsize):
    percent = 100.0*blocknum*blocksize/totalsize
    if percent > 100:
        percent = 100
    print("percent:", percent)


for i in range(hero_num):
    skin_names = json_hero[i]['skin_name'].split('|')
    hero_name = json_hero[i]['ename']
    skin_num = len(skin_names)

    print(hero_name, skin_names, skin_num)

for i in range(hero_num):                     //下載頭像
    save_file_name = 'D:\wangzhetouxiang\\' + str(json_hero[i]['ename']) + '.jpg'
    url = ('http://game.gtimg.cn/images/yxzj/img201606/heroimg/' + str(json_hero[i]['ename']) + '/'
           + str(json_hero[i]['ename']) + '.jpg')

    urllib.request.urlretrieve(url, save_file_name, callback)
for i in range(hero_num):                                  //下載皮膚
    skin_names = hero_json[i]['skin_name'].split('|')

    for cnt in range(len(skin_names)):
        save_file_name = ('D:\wangzhe\\' + str(hero_json[i]['ename']) + '-' + hero_json[i]['cname'] + '-'
                          + skin_names[cnt] + '.jpg')
        skin_url = ('http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(hero_json[i]['ename']) + '/'
                    + str(hero_json[i]['ename']) + '-bigskin-' + str(cnt+1) + '.jpg')
        urllib.request.urlretrieve(skin_url, save_file_name)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章