python 斗鱼爬虫

看了许久的斗鱼直播,突然心血来潮,想用爬虫对斗鱼所有直播间的信息抓取

一开始,我简单对斗鱼代码进行了分析,直观地认为所有直播间都在html文件里。

就直接 选择了 requests — bs4 路线 对其进行爬取。

思路是:先从获取所有游戏分类直播页面的url

在 用bs4库进行对当前页面进行数据提取

然后将其以文本形式输出 或者存入数据库

然而 在我要处理翻页的时候却返现,找不到对应的url链接 ,源代码里也没有包含翻页url标签

既然没法获取翻页链接,那么我们爬取全站直播间信息的目标是否到此为止了呢?

当然不能拉~~~

这时 一般有两种方法处理:第一种继续打开Chrome的开发者工具,当我们点击“下一页”之后,浏览器发送了如下请求:

接着 我们查看这些请求文件 点击它们

我们发现这个文件里面包含了当前页面的直播间的相关信息,是json格式

接着我们切回Headers一栏

General 是我们需要请求的地址、方式、状态

headers 是我们请求的头部信息

接下来

我经过仔细的分析发现 General 栏里的url 最后的两个数字是我们爬取全站的关键

至此 目标网站分析完毕

我们开始编写代码:

先导入requests库 : import requests

页面是json格式直接包含了我们要的信息

不用进行解析但是需要处理下json格式

导入json库:import simplejson

鉴于 url 的特性 我们采取for循环的手段进行循环访问

data_url = 'https://www.douyu.com/gapi/rkc/directory/'

for i in range(1,300):

'''

这是初始url:https://www.douyu.com/gapi/rkc/directory/2_1/1

我们只需要关注最后面的两个数字就可以了 分别代表 游戏分类 和 页码

1 = 英雄联盟 1 = 第一页

'''

start_url = data_url + '2_' + str(i) + '/1'

r = requests.get(start_url,headers).text

由于我们访问的页面是json格式,所以需要先处理成python对象便于后续操作

#页面是就json格式 有json库方法转换成python字典

json_obj = simplejson.loads(r)

#我们已经将其转换成字典,其中的pgcnt键对应的值是页码我们获取它

n = json_obj['data']['pgcnt']

#以循环的方式,对当前游戏分类的每一页进行遍历

for x in range(1,n+1):

json = requests.get(data_url + '2_' + str(i) + '/' + str(x)).text

jsobj = simplejson.loads(json)#再次对json格式进行转换

我们接下来创建一个字典保存我们需要的信息:(直播间的标题,主播昵称,热度,主播所在游戏分区

#我们需要的信息是rl键(key)对应的 值(value) 这个值是一个列表

for j in jsobj['data']['rl']:

item = {}

item['title'] = j['rn']

item['name'] = j['nn']

item['game'] = j['c2name']

item['hot'] = j['ol']

lst.append(item)

这样每一个游戏分区的每一页所包含的信息我们已经获取到了

接下来 我们把他存入到一个文件:

with open('斗鱼1.txt', 'a+',encoding='utf-8') as f:

f.write(str(lst))

如果不满意排序,请诸位自行采用格式化输出 如:.format()

我们对斗鱼直播信息的提取就算完了

纵观整篇代码,都非常简单,没有定义函数,没有定义类,就直接十来行代码就完事了

当然一是斗鱼没有反爬虫,我们获取的信息也都比较简单,出发点也只是心血来潮。再者我们找到了包含了直播间的信息的页面,不需要再进行网页解析和信息提取,json格式也有助于我们保存

至于第二种方法,是用selenium库 模拟浏览器进行点击翻页

但是在我找到了json格式的页面后,采用第二种方法反倒麻烦了!有兴趣的小伙伴可以去了解下selenium库

建议大家在对网页爬取时,先查看网站的robots协议,不要以盈利的目的进行深度爬取。并且不要频繁的访问 给网站服务器带来压力

本次文章 仅作学习交流,未经许可,不得私自盗用

就酱!!!

本文来自企鹅号 - 全球大搜罗媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏吴小龙同學

Android 组件化探索与思考

前言 开发中,我习惯性会把一个模块的功能放在一个包下,便于查找,但烦于耦合性太高,后期维护太费劲,因此对项目进行组件化拆分势在必行。组件化好处:便于开发,团队成...

3234
来自专栏施炯的IoT开发专栏

《101 Windows Phone 7 Apps》读书笔记-BABY NAME ELIMINATOR

课程内容 Ø本地数据库 Ø在应用程序中处理数据     Baby Name Eliminator是一种通过输入性格特征而获取婴儿名字的应用程序(我和我的妻...

1756
来自专栏北京马哥教育

Python黑科技 | 一步一步教你如何搭建自己的视频聚合站

? 前言 作为一个炉石传说玩家,经常有事没事开着直播网站看看大神们的精彩表演。不过因为各个平台互相挖人的关系,导致关注的一些主播分散到了各个直播平台,来回切...

3717
来自专栏携程技术中心

干货 | Tomcat类加载机制触发的Too many open files问题分析

作者简介 宋顺,携程框架研发部技术专家。2016年初加入携程,主要负责中间件产品的相关研发工作。毕业于复旦大学软件工程系,曾就职于大众点评,担任后台系统技术负责...

2836
来自专栏大前端开发

如何为你的微信小程序瘦身?

众所周知,微信小程序在发布的时候,对提交的代码有1M大小的限制!所以,如果你正在写一个功能稍微复杂一点的小程序,就必须得时刻小心注意你的代码是不是快触及这个底线...

825
来自专栏有趣的Python

Scrapy分布式爬虫打造搜索引擎-(六)scrapy进阶开发Python分布式爬虫打造搜索引擎

Python分布式爬虫打造搜索引擎 基于Scrapy、Redis、elasticsearch和django打造一个完整的搜索引擎网站 六、scrapy进阶开发 ...

3154
来自专栏QQ音乐技术团队的专栏

​使用Buck构建Android工程

0.导语 不论是“QQ音乐”亦或是“全民K歌”,其Android客户端目前都是功能繁多、体量庞大、方法数超过10万的庞大应用。庞大体量的工程带来了构建工程的一个...

35210
来自专栏程序员宝库

后端说:只是你不懂怎么用 headers!

事情是这样的,上一个项目我们的后端提供的接口,一次性返回了所有数据给我,分页功能是前端自己完成的。

1117
来自专栏司想君

手拉手,用Vue开发动态刷新Echarts组件

3828
来自专栏糊一笑

微信小程序初探【类微信UI聊天简单实现】

微信小程序最近很火,火到什么程度,只要你一打开微信,就是它的身影,几乎你用的各个APP都可以在微信中找到它的复制版,另外官方自带的跳一跳更是将它推到了空前至高的...

4125

扫码关注云+社区