前言
本篇文章是记录学习和使用python中的 requests
与 re
两个库
requests
库是python用来进行网页交互最常用的库
网上也有相当多的爬虫的教程
本文只用最简单的最朴素的方法进行一些页面的下载
不涉及自动翻页、自动查找元素
而是通过正则表达式,获取到所有想要的信息
实现过程
首先打开王者荣耀官网的英雄资料页面
通过浏览器检查发现英雄列表页规则如下:
1
<li><a href="herodetail/139.shtml" target="_blank"><img 每个英雄对应的那个数字是不一样的
要根据正则所有的行都找出来
获取到所有的英雄列表后
然后处理英雄对应的详情页面
1
2
比如:刘备
https://pvp.qq.com/web201605/herodetail/170.shtml 可以看到上面获取到的id就对应了每个英雄的详情页面
同样使用检查功能可以获取到英雄名称
1
<h2 class="cover-name">刘备</h2>
更新
使用检查功能可以获取到皮肤的图片地址,皮肤名称
1
<img src="//game.gtimg.cn/images/yxzj/img201606/heroimg/170/170-smallskin-2.jpg" alt="" data-imgname="//game.gtimg.cn/images/yxzj/img201606/skin/hero-info/170/170-bigskin-2.jpg" data-title="万事如意" data-icon="16">
图片地址要用那个 date-imgname
是大图
在我最初实现的时候没有获取英雄皮肤的名称
用了简单粗暴的方法
现在最多皮肤没有超过10个,所以我只把连接循环10次
如果可以访问就保存文件
最后就是循环访问各个图片连接,然后保存文件
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
fun:下载王者荣耀官网英雄海报
'''
import re
import requests
IMG_DIR = 'WZRYIMG/'
HEROLIST_URL = 'https://pvp.qq.com/web201605/herolist.shtml'
BIGSKIN_URL = 'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/'
HERODETIAL_URL = 'https://pvp.qq.com/web201605/herodetail/'
RE_HEROID = re.compile('.*<li><a href="herodetail/\d{3}.shtml" target="_blank"><img.*')
RE_HERONAME = re.compile('.*<h2 class="cover-name">.*</h2>.*')
def get_url_text(url):
res = requests.get(url)
res.encoding = 'gb2312'
return res.text
if __name__ == "__main__":
hero_ids = re.findall(RE_HEROID, get_url_text(HEROLIST_URL))
for hero_id_info in hero_ids:
hero_id = hero_id_info.replace(' ', '')[23:26]
herodetial_url = HERODETIAL_URL + str(hero_id) + '.shtml'
heroname = re.findall(RE_HERONAME, get_url_text(herodetial_url))[0].replace(' ', '')[22:-5]
for i in range(1, 10):
img_url = BIGSKIN_URL + hero_id + '/' + hero_id + '-bigskin-' + str(i) + '.jpg'
imgres = requests.get(img_url)
imgres.encoding = 'gb2312'
if imgres.status_code == 200:
file_name = heroname + '_' + str(i) + '.jpg'
file_path = IMG_DIR + file_name
with open(file_path, 'wb') as fp:
fp.write(imgres.content)
后记
代码最后把对应的图片按照英雄保存到本地文件夹
可以对代码进行简单的改动后
按照英雄的职业进行分类保存
ps:不要使用代码进行大批量访问网站,否则后果自负
Q:594934249
—我是超小弟·一名不务专业的秃头运维—
github:github:chaoxiaodi
微信公众号:老骥不伏枥只是近黄昏