爬虫练习-斗鱼颜值频道
1.抓包分析
这次使用手机抓包分析,抓包工具Charles
听说做app测试或者接口测试都需要使用到抓包工具(没做过,不晓得)
网上抓包工具的配置教程很多例如https://www.jianshu.com/p/5539599c7a25
配置好之后在手机上打开斗鱼APP找到颜值频道,清空Charles里面的内容
下拉刷新当前页面,然后下翻几页
删除Charles上与douyu域名无关的信息
大概留下如图内容:
逐条查看一下找到有主播名称的内容
https://apiv2.douyucdn.cn/gv2api/rkc/roomlist/2_201/0/20/ios?client_sys=ios
https://apiv2.douyucdn.cn/gv2api/rkc/roomlist/2_201/20/20/ios?client_sys=ios
https://apiv2.douyucdn.cn/gv2api/rkc/roomlist/2_201/40/20/ios?client_sys=ios
https://apiv2.douyucdn.cn/gv2api/rkc/roomlist/2_201/60/20/ios?client_sys=ios
其中唯一区别是/xx/20/ios?client_sys=ios 合理推断这是页数
从json里面发现几个比较关键的内容
房间id:room_id
房间名字:room_name
主播名字:nickname
主播封面:vertical_src
主播城市:anchor_city
1 | { |
2.代码编写
先创建两个url拼接,中间可以放页数的字符
1 | self.url_1 = 'https://apiv2.douyucdn.cn/gv2api/rkc/roomlist/2_201/' |
由于是用的手机端,为了防止出现什么问题,头部信息使用手机的agent
1 | self.HEADERS={'User-Agent':'ios/3.700 (ios 11.2.6; ; iPhone X (A1865/A1902))'} |
先写一个获取刚才分析了需要获得的信息的函数
import json
来对json内容进行转换
函数接受页数的传入
1.进行url的拼接
2.进行json的转换,转化成为python的字典格式
3.对转换后的字典取值
1 | def get_message(self,page): |
将取出来的值传入下载图片的函数中
1.使用图片的url进行访问并转换成二进制.content
2.为了不让图片零零散散,新建一个/img
文件存放图片
3.使用wb
写入二进制
1 | def download_pic(self,item): |
按照惯例使用进程池来加快下载速度
1 | if __name__ == '__main__': |
全代码如下:
1 | #!/usr/bin/env python |
运行结果: