利用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实现自动登录人人网并访问最近来访者实例
Sep 26 Python
Python基础中所出现的异常报错总结
Nov 19 Python
Python中遇到的小问题及解决方法汇总
Jan 11 Python
Python基于pandas实现json格式转换成dataframe的方法
Jun 22 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
Jun 26 Python
ML神器:sklearn的快速使用及入门
Jul 11 Python
python实现宿舍管理系统
Nov 22 Python
python、PyTorch图像读取与numpy转换实例
Jan 13 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
Feb 29 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
Jun 08 Python
Django 如何实现文件上传下载
Apr 08 Python
python编程实现清理微信重复缓存文件
Nov 01 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切割页面div内容的实现代码分享
2012/07/31 PHP
不错的新闻标题颜色效果
2006/12/10 Javascript
常用的javascript function代码
2008/05/23 Javascript
跨浏览器开发经验总结(三)   警惕“IE依赖综合症”
2010/05/13 Javascript
2010年最佳jQuery插件整理
2010/12/06 Javascript
按下回车键指向下一个位置的一个函数代码
2014/03/10 Javascript
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
理解javascript中Map代替循环
2016/02/26 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
2016/04/14 Javascript
JavaScript重载函数实例剖析
2016/05/13 Javascript
javaScript手机号码校验工具类PhoneUtils详解
2017/12/08 Javascript
angular4 JavaScript内存溢出问题
2018/03/06 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
微信小程序实现签到功能
2018/10/31 Javascript
JavaScript实现简单轮播图效果
2018/12/01 Javascript
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
2020/11/05 Javascript
vue3.0 自适应不同分辨率电脑的操作
2021/02/06 Vue.js
[51:29]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python自动化测试之从命令行运行测试用例with verbosity
2014/09/28 Python
python通过字典dict判断指定键值是否存在的方法
2015/03/21 Python
总结Python编程中三条常用的技巧
2015/05/11 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
Python探索之Metaclass初步了解
2017/10/28 Python
终端命令查看TensorFlow版本号及路径的方法
2018/06/13 Python
python中dir()与__dict__属性的区别浅析
2018/12/10 Python
OpenCV图像颜色反转算法详解
2019/05/13 Python
使用 Python 写一个简易的抽奖程序
2019/12/08 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
PyQt5实现画布小程序
2020/05/30 Python
Python常用扩展插件使用教程解析
2020/11/02 Python
计算机专业推荐信范文
2013/11/20 职场文书
大学毕业生管理学求职信
2014/09/01 职场文书
2014年医生工作总结
2014/11/21 职场文书
SQL Server表分区删除详情
2021/10/16 SQL Server