昨天在博客看见一篇关于用python爬王者荣耀中所有英雄的皮肤的文章,感觉挺有趣的,下载来当壁纸也不错,今天来用php也爬取一下、亲测可行。现在开始吧!
1.第一步首先打开
http://pvp.qq.com/web201605/herolist.shtml F12分析一波网页结构。。。
外面li标签里的是英雄的头像,点击头像才会出来单个英雄的所有皮肤,这可咋整呀。我们要的是一一口气把所有英雄的皮肤都爬取到本地,别急,看network。
这有个herolist.json文件,里面是所有英雄的名字,皮肤。
点击进入英雄的详情页。。继续F12
多点几个分析。。发现皮肤的图片地址都是类似这种格式
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/(英雄编号)/(英雄编号)-bigskin-(第几个皮肤).jpg
而编号和皮肤数都在刚才的json文件中。。。
下面就开始写代码了。。。完整代码如下:
<?php
//防止出现warning
error_reporting(E_ALL & ~E_NOTICE);
//json文件路径
$url = 'http://pvp.qq.com/web201605/js/herolist.json';
//获取json文件内容
$string = file_get_contents($url);
//去掉bom头文件 不然转换数组为null
$response = trim($string, chr(239) . chr(187) . chr(191));
//数组转化
$arr = json_decode($response, true);
//遍历
foreach ($arr as $k => $v) {
$ename = $arr[$k]['ename'];
$cname = $arr[$k]['cname'];
$skinName = explode('|', $arr[$k]['skin_name']);
$skinCount = count($skinName);
for ($i = 1; $i <= $skinCount; $i++) {
$urlPicture = "http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/$ename/$ename-bigskin-" . $i . ".jpg";
$name = 'D:/img/' . $cname . $skinName[$i] . '.jpg';//选择存放的路径 在你本地建相应的文件夹
$content = file_get_contents(@iconv('UTF-8', 'GBK', $urlPicture));
file_put_contents(@iconv('UTF-8', 'GBK', $name), $content);
}
}
ok 大功完成!然后直接运行这个php文件 开始爬取。。。。
看下成果