你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
首页
热门
推荐
精选
登录
|
注册
python 爬取王者荣耀高清壁纸
立即下载
用AI写一个
金额:
2
元
支付方式:
友情提醒:源码购买后不支持退换货
立即支付
我要免费下载
发布时间:2018-05-10
15人
|
浏览:4353次
|
收藏
|
分享
技术:python requests json
运行环境:python2.7 requests
概述
运用python2.7 requests 爬取下载http://pvp.qq.com/web201605/wallpaper.shtml 的高清壁纸
详细
##一、前言 > 打过王者的童鞋一般都会喜欢里边设计出来的英雄吧,特别想把王者荣耀的英雄的高清图片当成电脑桌面 预览一下桌面吧: ![](/contentImages/image/20180510/OVLlttekPNMS4Yove0r.jpg) 是不是看着这样的桌面也很带感,^_^ (学会这个技术,你可以爬取其他网站的类似图片,哄妹子专用,O(∩_∩)O哈哈~) ##二、程序实现 * 我们先去找一个靠谱的网站吧,自然而然的网站地址锁定在王者荣耀官网上,正好他给我们提供了壁纸页面 http://pvp.qq.com/web201605/wallpaper.shtml ![](/contentImages/image/20180508/ms1ydHIkpwceQ2gANIn.png) 一共14页 * 构建我们的目标数据URL 随便多翻几页,用firebug 等调试工具,观察一下我们的请求列表,找到其中特别明显的图片list api ![](/contentImages/image/20180508/plKAZOrfebwpjqSduLf.png) 展开以后,特别详细的URL http://apps.game.qq.com/cgi-bin/ams/module/ishow/V1.0/query/workList_inc.cgi?activityId=2735&sVerifyCode=ABCD&sDataType=JSON&iListNum=20&totalpage=0&page=10&iOrder=0&iSortNumClose=1&jsoncallback=jQuery17106927574791770883_1525742053044&iAMSActivityId=51991&_everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735&_=1525742856493 问题简单了就: urls = [ "http://apps.game.qq.com/cgi-bin/ams/module/ishow/V1.0/query/workList_inc.cgi?activityId=2735&page=%d&sVerifyCode=ABCD&sDataType=JSON&iListNum=20&totalpage=0&iOrder=0&iSortNumClose=1&jsoncallback=jQuery1710881537174597735 6_1486710433816&iAMSActivityId=51991&_everyRead=true&iTypeId=2&iFlowId=267733&iActId=2735&iModuleId=2735&_=1486710458098" % (p) for p in range(0,14) ] * 获取文档的内容: 这一步就比较简单了,requests 堪称写给人类的http 请求库,可以自己参看他的api 很强大,可以完成,任何手工在浏览器上的任何行为,用得好,你可以省掉很多的事儿,顺路贴一个api 链接吧 (http://www.python-requests.org/en/master/)[http://www.python-requests.org/en/master/] def loadUrlContent(url): return requests.get(u).text * 解析文档内容 : api 返回情况,大致如下: 是一个jsonp callback的返回 ![](/contentImages/image/20180508/x8BFWhSfmosSVbNRp9w.png) 这种情况一般是callback后边对应了一个json对象,我们可以用python的 json 类库来解析: > 解析数据千差万别,本文的数据相对简单,所以用了相对简单的处理方式: ## 这种解析数据的代码并不适用于所有的页面 def jsonContent(pageContent): json_content = pageContent.split("(")[1].split(")")[0] return json.loads(json_content) >解析完成以后的一个json对象属性如下: ![](/contentImages/image/20180509/VTKv8n1ieEdAr0zSXbt.png) 查看json 对象内容必备: [https://www.json.cn/](https://www.json.cn/) 可以看到清晰的对象属性 很明显的,List 属性就是我们想要获取的壁纸对象了,然后,其中 sProdImgNo_1,2,3,4,5,6,7,8 中保存了,url 编码的图片url地址。 本实例为了演示我们只获取其中的 sProdImgNo_5 来做下载,大家可以根据需求做不同的遍历. 写一个简单的对象循环完成我们的子任务吧: for item in pageJson['List']: dealWithItem(item) * 处理元素函数 , 下载文件图片: 观察发现图片url 是url编码好的地址: 我们可以用 urllib 的 unquote 方法转成原文: 获取的一个图片URL原文是这样的: ![](/contentImages/image/20180509/F8JsfVCkOl9usRCIFe5.png) 自行对比下,观测到的图片的真实地址如下: ![](/contentImages/image/20180509/HlQ2eDP5yRQsWwfSdxl.png) 然后,我们只需要简单的把 200 replace 成0 就ok 了。 下载文件,直接通过requests get url 保存成文件就ok啦。 ##三、运行效果 * 最终展示下我们的成果吧: ![](/contentImages/image/20180509/ogYyZNagXoKunyJ3YSK.jpg) ##四、项目文件结构 ![](/contentImages/image/20180510/nk7uz34z1rlJ6r1psHx.png)
本实例支付的费用只是购买源码的费用,如有疑问欢迎在文末留言交流,如需作者在线代码指导、定制等,在作者开启付费服务后,可以点击“购买服务”进行实时联系,请知悉,谢谢
感谢
2
手机上随时阅读、收藏该文章 ?请扫下方二维码
相似例子推荐
评论
作者
☆星影♡
购买服务
购买服务
服务描述:
可以一起聊聊技术实现方案等
服务价格:
¥50
我要联系
3
例子数量
26
帮助
9
感谢
评分详细
可运行:
4.5
分
代码质量:
4.5
分
文章描述详细:
4.5
分
代码注释:
4.5
分
综合:
4.5
分
作者例子
python 爬取王者荣耀高清壁纸
使用python-nmap 搭建基本端口扫描器
使用python3打造一个自己的mysql管理工具库