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 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

工欲善其事,可能会有用的Clion技巧

半年前我开始用 Clion,顺带着写了一篇心得记录使用 CLion 的技巧,没想到发布在简书后浏览量还是挺高的,居然还获得了人生中第一笔真正的打赏,感动之余也...

482
来自专栏大数据文摘

Jupyter Notebook的27个窍门,技巧和快捷键

26411
来自专栏Golang语言社区

使用 Go 语言完成 HTTP 文件上传与下载

最近我使用 Go 语言完成了一个正式的 web 应用,有一些方面的问题在使用 Go 开发 web 应用过程中比较重要。过去,我将 web 开发作为一项职业并且把...

46111
来自专栏数据科学与人工智能

【Python环境】Scrapy爬虫轻松抓取网站数据

网络爬虫(Web Crawler, Spider)就是一个在网络上乱爬的机器人。当然它通常并不是一个实体的机器人,因为网络本身也是虚拟的东西,所以这个“机器人”...

27510
来自专栏张戈的专栏

利用JS生成二维码图片,优化WEB性能及页面加载速度

移动互联网的蓬勃发展绝对离不开二维码的“推波助澜”,一张小小的图片,省去了繁琐的苦逼输入,也拉近了 PC 端和移动端的距离!虽然是东洋人最初发明的,但我还是要给...

2964
来自专栏大闲人柴毛毛

爬虫其实很简单!——网络爬虫快速实现(一)

今天我来带领大家一起学习编写一个网络爬虫!其实爬虫很简单,没有想象中那么难,也许所有学问都是这样,恐惧源自于无知。废话不多说,现在开始我们的爬虫之旅吧。 爬虫是...

5167
来自专栏LIN_ZONE

js 判断当前操作系统是ios还是android还是电脑端

732
来自专栏草根博客站长有话说

命令行界面 (CLI)、终端 (Terminal)、Shell、TTY,这些都是啥意思?

为什么突然想写这样一篇文章呢?其实是因为在最近计划发布的一篇关于 WSL (Windows Subsystem for Linux) 的博文中,我打算对终端模拟...

896
来自专栏Hongten

python开发_webbrowser_浏览器控制模块

下面是我做的demo,在demo运行的时候,系统默认的浏览器会打开:http://www.baidu.com/

1152
来自专栏王二麻子IT技术交流园地

《跟我学IDEA》四、配置模板(提高代码编写效率)

上一篇博文,我们学习了idea的一些实用配置,相信大家也对idea这个开发工具有了一个大概的了解。今天我们来学习模板的配置,idea提供很多模板从而提高编写代码...

5077

扫码关注云+社区