Python爬取王者荣耀英雄的皮肤数据,并下载皮肤图片!高清的图片用来做桌面也不错哟~
网址:https://pvp.qq.com/web201605/herolist.shtml
1.获得英雄信息,并保存为json文件
1.1 使用requests爬取信息,requests模块爬取的是Network/Response下的静态数据。
首先获取网页的数据(有如下1.1和1.2两种方式),在此之前先了解xpath的使用:xpath是使用节点路径表达式来选取XML或HTML文档中的节点或节点集。常见的路径表达式如下
路径表达式 | 含义 |
---|---|
/ | 从根节点开始选取,也就是当前目录 |
// | 从任意位置开始 |
. | 当前目录 |
@ | 选取属性 |
text() | 获取某标签内的内容值 |
例如我们要获得百度首页右上方的文字“新闻”,它的表达式就是
//div[@id = 's-top-left']/a[1]/text()
任意位置的div,属性id的值为s-top-left,它里面的第一个a标签的内容值
json模板的2个常用方法
dump(obj,fp, ensure=True,indent=None) | 将Python的基本数据类型序列化成字符串并写入到文件中。 |
---|---|
load(obj) | 读取文件中的字符串,转化成Python的基本数据类型。 |
使用requests模块爬取数据的代码如下:
import requests
import lxml.html
import os
import json
from fake_useragent import UserAgent
def parse_hero_url(http_url):
#发送请求获取整个页面数据
headers = {
"User-Agent" : UserAgent().chrome #chrome浏览器随机代理
}
hero_r = requests.get(http_url,headers = headers)
demo = hero_r.content.decode('gbk')
return demo
def get_data(hero_url):
#获取网页数据
data = parse_hero_url(hero_url)
#print(data)
#获取etree对象
metree = lxml.html.etree
#获取解析器对象
parse = metree.HTML(data)
#开始解析
hero_list = parse.xpath("//div[@class='herolist-content']/ul[@class='herolist clearfix']/li")
print(len(hero_list))#查看我们爬取到几个英雄的信息
#print(hero_list)
list = []
for li in hero_list:
item = {
}
name = li.xpath("./a/text()")[0]
#print(name)
item['name'] = name
src = "https:"+li.xpath("./a/img/@src")[0]
#print(src)
item['src'] = src
href_url = "https://pvp.qq.com/web201605/"+li.xpath("./a/@href")[0]
#print(href_url)
item['href_url'] = href_url
#print(item)
list.append(item)
# print(list)
return list
#保存文件
def save_file_json(datas):
#如果路径不存在,则创建
path_name = './hero'
if not os.path.exists(path_name):
os.makedirs(path_name)
print('目录[%s]保存英雄信息创建成功!'%path_name)
#保存数据
with open(path_name+'/hero.json', 'w',encoding='utf-8') as f:
json.dump(datas, f,ensure_ascii=False,indent=2)
print('英雄数据保存