今天目的是爬取所有英雄皮肤
在爬取所有之前,先完成一张皮肤的爬取
打开anacond调出编译器Jupyter Notebook
打开王者荣耀官网
下拉找到位于网页右边的英雄/皮肤
点击【+更多】
进入英雄皮肤页面
按键盘F12调出网页代码
点击进入调出页的【Network】(这里是谷歌浏览器,其他浏览器可能显示为’网络‘)
刷新网页 重新接收所有网页数据(不要关闭调出的Network页)
刷新后在Network下会看到所有的数据重新加载处来
找到名为【herolist.json】的json文件(有两个随便选中一个就行
看右边会有这个文件的说明 复制这个json文件的URL地址:
浏览器打开一个新窗口将地址粘贴进去,此时浏览器会自动下载【herolist.json】文件
在文件夹中能找到它
此时将程序写到这里
import urllib.request import json import os v_herolist_url = urllib.request.urlopen('http://pvp.qq.com/web201605/js/herolist.json') v_herolist = v_herolist_url.read()
当print(v_herolist)时,编译器底下会出现如下内容:
显示的\xe5\xbb这些是Unicode编码,要对它进行解码
v_herolist=v_herolist_url.read().decode('utf-8')
转换为json格式
hero_json=json.loads(v_herolist)
但此时输出的话会报错:
hero_json=json.loads(v_herolist)
print(hero_json) #报错,自己百度
v_herolist=v_herolist.encode('utf8')[3:].decode('utf-8')
此时对其进行反编码并切掉python自动加入的编码方式声明’\xef\xbb\xbf‘
v_herolist=v_herolist.encode('utf8')[3:].decode('utf-8') hero_json=json.loads(v_herolist) print(hero_json)
爬取一张图片:
打开王者荣耀英雄/皮肤页面,随便选取一个英雄,在显示皮肤图片位置右击选中检查
在元素页面中会有图片的地址:
复制地址 并在首部加上 【http:】
创建本地文件夹存放图片
# 创建本地文件夹 hero_dir='D:\python practice\myhero\\' #文件夹后面要加两个‘\\’!! if not os.path.exists(hero_dir): #如果不存在这个文件夹 自动创建 os.mkdir(hero_dir)
爬取这张皮肤图片
skin_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/131/131-bigskin-2.jpg' hero_img = hero_dir+"aa.jpg" urllib.request.urlretrieve(skin_url,hero_img) #这里只是爬取到了一张 如何爬取多张?
爬取成功:
完整程序代码:
#王者荣耀皮肤爬取 import urllib.request import json import os #爬取皮肤的json文件 v_herolist_url=urllib.request.urlopen("http://pvp.qq.com/web201605/js/herolist.json") #请求 v_herolist=v_herolist_url.read().decode('utf-8') #要进行python字符串切割 #解码 #截取 #\xef\xbb\xbf 是python自动加入的编码方式声明 可以用正则表达式 v_herolist=v_herolist.encode('utf8')[3:].decode('utf-8') hero_json=json.loads(v_herolist) # 创建本地文件夹 hero_dir='D:\python practice\myhero\\' if not os.path.exists(hero_dir): os.mkdir(hero_dir) skin_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/131/131-bigskin-2.jpg' hero_img = hero_dir+"aa.jpg" urllib.request.urlretrieve(skin_url,hero_img)
以下为多张皮肤爬取(只贴代码,有空详细解释):
#爬虫 -- 王者荣耀 import urllib.request import json import os #对计算机的操作 #json文件 v_herolist_url = urllib.request.urlopen("http://pvp.qq.com/web201605/js/herolist.json") #请求 v_herolist = v_herolist_url.read().decode('utf-8') #字符串的截取BOM脚本 # \xef\xbb\xbf -- python 自动加入的编码方式声明 v_hero = v_herolist.encode('utf8')[3:].decode('utf-8') #转换json格式 #返回一个变量 hero_json = json.loads(v_hero) #获取长度 hero_num = len(hero_json) #皮肤网址 #http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/167/167-bigskin-5.jpg #创建本地文件夹 hero_dir = 'D:\python practice\myhero\\' if not os.path.exists(hero_dir): os.mkdir(hero_dir) for num in range(hero_num): skinsname = hero_json[num]['skin_name'].split("|") for i in range(len(skinsname)): skin_name = hero_json[num]['ename'] #皮肤的数字标记 #皮肤地址 skin_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/'+str(skin_name)+'/'+str(skin_name)+'-bigskin-'+str(i+1)+'.jpg' #要保存的地址 save_url=hero_dir+str(skin_name)+"_"+str(i+1)+".jpg" urllib.request.urlretrieve(skin_url,save_url)