利用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正则用法实例讲解
Jun 21 Python
Python SQLite3简介
Feb 22 Python
Python查看微信撤回消息代码
Jun 07 Python
Python实现调用另一个路径下py文件中的函数方法总结
Jun 07 Python
Python实现快速傅里叶变换的方法(FFT)
Jul 21 Python
使用Python抓取豆瓣影评数据的方法
Oct 17 Python
Python docx库用法示例分析
Feb 16 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
May 03 Python
django使用django-apscheduler 实现定时任务的例子
Jul 20 Python
python爬虫增加访问量的方法
Aug 22 Python
将tf.batch_matmul替换成tf.matmul的实现
Jun 18 Python
Python3合并两个有序数组代码实例
Aug 11 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
PHP时间类完整实例(非常实用)
2015/12/25 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
javascript与CSS复习(二)
2010/06/29 Javascript
ie下$.getJSON出现问题的解决方法
2014/02/12 Javascript
Javascript和Java获取各种form表单信息的简单实例
2014/02/14 Javascript
javascript的动态加载、缓存、更新以及复用(一)
2014/06/09 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
Nodejs express框架一个工程中同时使用ejs模版和jade模版
2015/12/28 NodeJs
巧用数组制作图片切换js代码
2016/11/29 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
Angular2使用Angular-CLI快速搭建工程(二)
2017/05/21 Javascript
vue使用vue-cli快速创建工程
2017/07/28 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
2017/10/25 Javascript
vue给input file绑定函数获取当前上传的对象完美实现方法
2017/12/15 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
详解js删除数组中的指定元素
2018/10/31 Javascript
vue-i18n结合Element-ui的配置方法
2019/05/20 Javascript
js实现点击按钮随机生成背景颜色
2020/09/05 Javascript
[44:50]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 TNC vs VG
2018/04/02 DOTA
基于Python实现的扫雷游戏实例代码
2014/08/01 Python
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
python调用API实现智能回复机器人
2018/04/10 Python
Python常见字典内建函数用法示例
2018/05/14 Python
python ctypes库2_指定参数类型和返回类型详解
2019/11/19 Python
解决TensorFlow GPU版出现OOM错误的问题
2020/02/03 Python
Python使用configparser库读取配置文件
2020/02/22 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
serialVersionUID具有什么样的特征
2014/02/20 面试题
小学生期末自我鉴定
2014/01/19 职场文书
旅游业大学生创业计划书
2014/01/31 职场文书
青年文明号申报材料
2014/12/23 职场文书
朝花夕拾读书笔记
2015/06/29 职场文书
新教师2015年度工作总结
2015/07/22 职场文书
Python函数式编程中itertools模块详解
2021/09/15 Python