前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 斗鱼爬虫

python 斗鱼爬虫

作者头像
企鹅号小编
发布2018-01-04 09:17:48
1.8K0
发布2018-01-04 09:17:48
举报
文章被收录于专栏:大数据大数据

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

一开始,我简单对斗鱼代码进行了分析,直观地认为所有直播间都在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协议,不要以盈利的目的进行深度爬取。并且不要频繁的访问 给网站服务器带来压力

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

就酱!!!

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

如有侵权,请联系 cloudcommunity@tencent.com 删除。

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

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档