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

相关文章

来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2997
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

3346
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

3277
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

3818
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.6K7
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

3565
来自专栏魂祭心

原 canvas绘制clock

5904
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

5598
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

3502
来自专栏杨龙飞前端

scrollto 到指定位置

3435

扫码关注云+社区