利用python爬取斗鱼app中照片方法实例


Posted in Python onDecember 03, 2017

前言

没想到python是如此强大,令人着迷,以前看见图片总是一张一张复制粘贴,现在好了,学会python就可以用程序将一张张图片,保存下来。

最近看到斗鱼里的照片都不错,决定用最新学习的python技术进行爬取,下面将实现的过程分享出来供大家参考,下面话不多说了,来一起看看详细的介绍吧。

方法如下:

首先下载一个斗鱼(不下载也可以,url都在这了对吧)

 

通过抓包,抓取到一个json的数据包,得到下面的地址

利用python爬取斗鱼app中照片方法实例 

观察测试可知,通过修改offset值就是相当于app的翻页

访问这个url,返回得到的是一个大字典,字典里面两个索引,一个error,一个data。而data又是一个长度为20的数组,每个数组又是一个字典。每个字典中又有一个索引,vertical_src。

我们的目标就是它了!

import urllib.parse
import urllib
import json
import urllib.request
data_info={}
data_info['type']='AUTO'
data_info['doctype']='json'
data_info['xmlVersion']='1.6'
data_info['ue']='UTF-8'
data_info['typoResult']='true'
head_info={}
head_info['User-Agent']='DYZB/2.271 (iphone; iOS 9.3.2; Scale/3.00)'
url='http://capi.douyucdn.cn/api/v1/getVerticalRoom?aid=ios&client_sys=ios&limit=20&offset=20'
data_info=urllib.parse.urlencode(data_info).encode('utf-8')
print(data_info)
requ=urllib.request.Request(url,data_info)
requ.add_header('Referer','http://capi.douyucdn.cn')
requ.add_header('User-Agent','DYZB/2.271 (iphone; iOS 9.3.2; Scale/3.00)')
response=urllib.request.urlopen(requ)
print(response)
html=response.read().decode('utf-8')

这短短20多行代码就能返回得到json数据了。然后再通过对这json代码的切片,分离得到每个主播照片的url地址。

然后得到这一页的照片

import json
import urllib.request
data_info={}
data_info['type']='AUTO'
data_info['doctype']='json'
data_info['xmlVersion']='1.6'
data_info['ue']='UTF-8'
data_info['typoResult']='true'

url+str(i)='http://capi.douyucdn.cn/api/v1/getVerticalRoom?aid=ios&client_sys=ios&limit=20&offset='+str(x)
data_info=urllib.parse.urlencode(data_info).encode('utf-8')
print(data_info)
requ=urllib.request.Request(url,data_info)
requ.add_header('Referer','http://capi.douyucdn.cn')
requ.add_header('User-Agent','DYZB/2.271 (iphone; iOS 9.3.2; Scale/3.00)')
response=urllib.request.urlopen(requ)
print(response)
html=response.read().decode('utf-8')
'''
 print(type(dictionary))
print(type(dictionary[data]))
'''
dictionary=json.loads(html)
data_arr=dictionary["data"]
for i in range(0,19):
  name=data_arr[i]["nickname"]
  img_url=data_arr[i]["vertical_src"]
  print(type(img_url))
  respon_tem=urllib.request.urlopen(img_url)
  anchor_img=respon_tem.read()
  with open('../photos/'+name+'.jpg','wb') as f:
    f.write(anchor_img)

然后修改一下,让它有了翻页的功能

import urllib.parse
import urllib
import json
import urllib.request
data_info={}
data_info['type']='AUTO'
data_info['doctype']='json'
data_info['xmlVersion']='1.6'
data_info['ue']='UTF-8'
data_info['typoResult']='true'
data_info=urllib.parse.urlencode(data_info).encode('utf-8')

for x in range(0,195):
  url='http://capi.douyucdn.cn/api/v1/getVerticalRoom?aid=ios&client_sys=ios&limit=20&offset='+str(x)
  print(data_info)
  requ=urllib.request.Request(url,data_info)
  requ.add_header('Referer','http://capi.douyucdn.cn')
  requ.add_header('User-Agent','DYZB/2.271 (iphone; iOS 9.3.2; Scale/3.00)')
  response=urllib.request.urlopen(requ)
  print(response)
  html=response.read().decode('utf-8')
  dictionary=json.loads(html)
  data_arr=dictionary["data"]
  for i in range(0,19):
    name=data_arr[i]["nickname"]
    img_url=data_arr[i]["vertical_src"]
    print(type(img_url))
    respon_tem=urllib.request.urlopen(img_url)
    anchor_img=respon_tem.read()
    with open('../photos/'+name+'.jpg','wb') as f:
      f.write(anchor_img)

然后就等着吧~~

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
对于Python异常处理慎用“except:pass”建议
Apr 02 Python
Python入门之modf()方法的使用
May 15 Python
python编码总结(编码类型、格式、转码)
Jul 01 Python
Python自动化测试ConfigParser模块读写配置文件
Aug 15 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
配置 Pycharm 默认 Test runner 的图文教程
Nov 30 Python
python通过paramiko复制远程文件及文件目录到本地
Apr 30 Python
如何使用pyinstaller打包32位的exe程序
May 26 Python
python把一个字符串切开的实例方法
Sep 27 Python
解决python 输出到csv 出现多空行的情况
Mar 24 Python
浅谈哪个Python库才最适合做数据可视化
Jun 28 Python
python和C/C++混合编程之使用ctypes调用 C/C++的dll
Apr 29 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
Dec 03 #Python
python3利用smtplib通过qq邮箱发送邮件方法示例
Dec 03 #Python
Python中类的初始化特殊方法
Dec 01 #Python
Python抓取框架Scrapy爬虫入门:页面提取
Dec 01 #Python
Python实现调度算法代码详解
Dec 01 #Python
Python进阶学习之特殊方法实例详析
Dec 01 #Python
Python用户推荐系统曼哈顿算法实现完整代码
Dec 01 #Python
You might like
关于UEditor编辑器远程图片上传失败的解决办法
2012/08/31 PHP
thinkphp中ajax与php响应过程详解
2014/12/08 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
js实现点击链接后窗口缩小并居中的方法
2015/03/02 Javascript
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
浅谈angular懒加载的一些坑
2016/08/20 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
微信小程序 自己制作小组件实例详解
2016/12/22 Javascript
VUE JS 使用组件实现双向绑定的示例代码
2017/01/10 Javascript
jquery滚动条插件slimScroll使用方法
2017/02/09 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
微信小程序 功能函数小结(手机号验证*、密码验证*、获取验证码*)
2017/12/08 Javascript
vue.js使用v-if实现显示与隐藏功能示例
2018/07/06 Javascript
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
vue中axios的二次封装实例讲解
2019/10/14 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
python开发之thread线程基础实例入门
2015/11/11 Python
独特的python循环语句
2016/11/20 Python
Python3.6.2调用ffmpeg的方法
2019/01/10 Python
python中对_init_的理解及实例解析
2019/10/11 Python
python 通过手机号识别出对应的微信性别(实例代码)
2019/12/22 Python
Python urllib库如何添加headers过程解析
2020/10/05 Python
Keds加拿大官网:购买帆布运动鞋和皮鞋
2019/09/26 全球购物
Molton Brown美国官网:奢华美容、香水、沐浴和身体护理
2020/09/02 全球购物
毕业证丢失证明
2014/01/15 职场文书
乡镇镇长个人整改措施
2014/10/01 职场文书
领导干部作风建设剖析材料
2014/10/11 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
餐厅开业活动方案
2019/07/08 职场文书
导游词之泉州崇武古城
2019/12/20 职场文书
mysql的MVCC多版本并发控制的实现
2021/04/14 MySQL
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang
Vue.js中v-bind指令的用法介绍
2022/03/13 Vue.js