获取《王者荣耀》全英雄高清无码图

来源:文化艺术资讯网 ·   王者荣耀  王者荣耀1500张禁图 
最近看到有网友爬《王者荣耀》全英雄皮肤图,觉得挺有意思的;也顺便记录下自己在分析爬虫的过程。然后点进英雄后F12,选择对应的皮肤查询图片链接地址。最后就是搜集链接地址,下载图片保存。使用requests库抓取页面,使用BeautifulSoup分析返回的html。通过代码获取的"英雄详细页“数据 和 浏览器F12看到的不一样。我首先想到的是cookies 和 headers 参数。但后面详细分析请求和几次尝试后问题还是没能解决。但分析后并未找至ajax请求数据。后来详细看了几个 js文件才找至答案。有朋友反应已经不能正常爬取图片,今天维护下。发现页面中的herolist已经改成ajax异步获取。

前言

最近看到有网友爬《王者荣耀》全英雄皮肤图,觉得挺有意思的;也顺便记录下自己在分析爬虫的过程。

正文

0x01分析

首先打开http://pvp.qq.com/web201605/herolist.shtml可以看到全英雄列表,F12进入调试模式。找到英雄对应的链接地址。



然后点进英雄后F12,选择对应的皮肤查询图片链接地址。这里取图片链接有有问题,后面代码实现详细说。



最后就是搜集链接地址,下载图片保存。

0x02代码实现

使用requests库抓取页面,使用BeautifulSoup分析返回的html。获取所有英雄的详细链接、名称和编号

import os import re import requests from bs4 import BeautifulSoup baseurl = 'http://pvp.qq.com/web201605' mainurl = 'http://pvp.qq.com/web201605/herolist.shtml' herolist = [ ] def getHeroList ( ) : '''取所以英雄存入list中''' hero = { } res = requests . get ( mainurl ) sp = BeautifulSoup ( res . content , "html.parser" ) lists = sp . select ( 'body > div.wrapper > div > div > div.herolist-box > div.herolist-content > ul > li' ) for li in lists : oj = li . select ( 'a' ) [ 0 ] ; hero [ 'url' ] = oj [ 'href' ] hero [ 'name' ] = oj . text ename = re . findall ( 'herodetail/(\d+)\.shtml' , oj [ 'href' ] ) [ 0 ] hero [ 'ename' ] = ename herolist . append ( hero ) hero = { } return herolist

获取英雄皮肤图片链接,本以为会像“获取英雄链接”一样简单的,但我错了。通过代码获取的"英雄详细页“数据 和 浏览器F12看到的不一样。

代码获取的内容



浏览器F12下的内容



0x03问题分析与处理

猜想一

我首先想到的是cookies 和 headers 参数。但后面详细分析请求和几次尝试后问题还是没能解决。

猜想二

怀疑是页面ajax异步请求获取的地址。但分析后并未找至ajax请求数据。

问题确定

后来详细看了几个 js文件才找至答案。图片链接是js中生成。



0x04爬虫的实现

for hero in herolist : herodir = os . path . join ( os . getcwd ( ) , hero [ 'name' ] ) heropage = baseurl + '/' + hero [ 'url' ] print ( '------------%s---%s-----------' % ( herodir , heropage ) ) res = requests . get ( heropage ) sop = BeautifulSoup ( res . content , "html.parser" ) li = sop . select ( 'body > div.wrapper > div.zk-con1.zk-con > div > div > div.pic-pf > ul ' ) [ 0 ] [ 'data-imgname' ] print ( li ) li = str ( li ) . split ( '|' ) print ( li ) for i in range ( len ( li ) ) : imgurl = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' \ + hero [ 'ename' ] + '/' + hero [ 'ename' ] + '-bigskin-' + str ( i + 1 ) + '.jpg' imgname = os . path . join ( herodir , li [ i ] + ".jpg" ) print ( '----[%s]--[%s]---' % ( imgname , imgurl ) ) if os . path . exists ( herodir ) == False : os . mkdir ( herodir ) saveImg ( imgname , imgurl )

====== 20181024更新 =====

有朋友反应已经不能正常爬取图片,今天维护下。发现页面中的herolist已经改成ajax异步获取。同步下代码给有需要的朋友

两图说明下ajax的过程





环境说明

python3.6

requests

bs4

json

最新代码

链接: https://pan.baidu.com/s/17FP1jom16VvXHc0AJkkIGA

密码: 5i5u

文章推荐:

辟谣:李天一仍在牢里蹲 回顾“海淀银枪小霸王”轮奸案

2011年,李天一殴打他人缝11针,李双江低头道歉放下“将军”尊严

李天一打人事件透视:这样的二代早晚得“坑爹”-搜狐母婴

李天一打人事件是怎么回事呢?

由李天一打人事件谈谈富二代现象

文章推荐:

张杰 浩瀚歌词 《神雕侠侣》电视剧片头主题曲

排球女将插曲

一瞬间歌词 丽江小倩

艺术中国

美院学子 | 2017清华大学学生年度人物提名候选人:于婉莹