实现简单小爬虫,爬取斗鱼直播页面所有当前在线直播列表信息

文章目录

  • 1 目标分析
  • 2 分析URL
    • 2.1 分析首页URL
    • 2.2 分析换页URL
    • 2.3 确定爬取URL
  • 3 代码
  • 4 总结

1 目标分析

爬取斗鱼直播页面所有当前在线直播列表信息,包括房间标题、主播名、所属类别、热度等信息。

2 分析URL

2.1 分析首页URL

打开斗鱼直播https://www.douyu.com/directory/all

很容易发现,通过https://www.douyu.com/directory/all链接打开网页时,浏览器加载的第一个文件(all)包含了页面上的所需的数据,JSS和CSS仅修改页面显示及动画,未修改数据。该请求获取的文件可能是缓存服务器中的数据

2.2 分析换页URL

通过点击页2,发现浏览器地址栏URL没有发生改变,由此可知,换页操作是AJAX请求
在加载的文件中,可以找到一个文件名为“2”的文件,包含JSON数据,其内容与页面直播信息一致,且其中’pgcnt’对应的值与最大页面数相同。

查看文件“2”的请求头信息,得到AJAX请求的URLhttps://www.douyu.com/gapi/rkc/directory/0_0/2

点击页3,也很容易就找到文件名为“3”的文件,其请求URL为https://www.douyu.com/gapi/rkc/directory/0_0/3,与“2”的请求URL差别仅在最后“/数字”的区别。

点击末页,会得到类似的结果。

再回头点击页1,发现也是AJAX请求,得到文件名为“1”的json文件,其请求URL为https://www.douyu.com/gapi/rkc/directory/0_0/1

2.3 确定爬取URL

由以上分析可以推断出,换页操作是AJAX请求,请求URL为:https://www.douyu.com/gapi/rkc/directory/0_0/num,num为对应页面数。
URL未加密,变化规律简单。

3 代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import json
import requestsclass DouyuSpider:def __init__(self):""" 初始化DouyuSpider创建一个斗鱼直播页面爬虫"""self.headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36',}# 直播大厅:https://www.douyu.com/directory/all# https://www.douyu.com/gapi/rkc/directory/0_0/2self.start_url = 'https://www.douyu.com/gapi/rkc/directory/0_0/{:d}'def fetch_one_page(self, offset):""" 发起请求,获取响应数据:param offset: 页面序号:return response.content: 二进制响应体数据"""response = requests.get(self.start_url.format(offset),headers=self.headers)return response.contentdef parse_json(self, content):"""解析数据:param content: 响应体二进制数据:return items, pgcnt: 直播信息列表,当前最大页面数"""results = json.loads(content.decode())['data']items = []num = 0for result in results['rl']:item = {}item['topic'] = result['c2name']item['title'] = result['rn']ol = result['ol'] / 10000if ol == 0:item['hot'] = '0'else:item['hot'] = f'{ol:.1f}万'item['user'] = result['nn']item['room_url'] = 'https://www.douyu.com/{}'.format(result['url'])items.append(item)num += 1if num % 20 == 0:print(f'完成第{num}条数据')print(item)return items, int(results['pgcnt'])def save_content(self, items):""" 保存数据:param items: 直播信息列表:return None:"""with open('douyu.json', 'a+', encoding='utf-8') as f:for data in items:json.dump(data, f, ensure_ascii=False)f.write('\n')def is_next(self, max_pages, offset):""" 判断是否有下一页:param max_pages: 当前最大页面数:param offset:  已爬取页数:return next_flag: 是否有下一页"""if offset <  max_pages:next_flag = Trueif offset >= max_pages:next_flag = Falsereturn next_flagdef run(self):""" 运行爬虫开始爬取数据"""offset = 0next_flag = Truewhile next_flag:offset += 1html = self.fetch_one_page(offset)items, max_pages = self.parse_json(html)self.save_content(items)print('*'*10 + f'完成第{offset}页' + '*'*10)print(f'最大页数{max_pages}')next_flag = self.is_next(max_pages, offset)# next_flag = Falseprint('已爬取所有页面')if __name__ == '__main__':dou_spider = DouyuSpider()dou_spider.run()

4 总结

AJAX请求URL没有加密,所以非常容易获取服务器返回的JSON数据,解析JSON数据就能得到所需要的数据。

Requests爬取斗鱼直播列表信息相关推荐

  1. Python爬取斗鱼直播网站信息

    一.需求 爬取斗鱼直播网站信息,如直播名字.主播名字.热度.图片和房间网址,将这些数据保存到csv文件中,并单独创建文件夹保存图片. 斗鱼直播网址:https://www.douyu.com/g_LO ...

  2. 使用scrapy爬取斗鱼直播间信息

    目录 1. 谷歌抓包工具的使用 1.1 打开Chrome开发者工具的方法 1.2 开发者工具的结构 1.3 network模块 2. 使用谷歌抓包工具抓取斗鱼数据 3. 使用scrapy爬取斗鱼直播间 ...

  3. 利用斗鱼api学习爬取斗鱼直播间信息

    python爬取斗鱼房间的弹幕 斗鱼弹幕服务api:https://open.douyu.com/source/api/63 基本步骤: 连接斗鱼api服务器 构造登录请求 进入房间并构造获取弹幕请求 ...

  4. 利用Python爬虫爬取斗鱼直播间信息,以及直播的实际人数!

    首先我准备利用mysql来存储我爬取的信息,建一个host表如下: 然后下载pymysql ,利用它与数据库链接,因为在这里我只涉及到写入的操作: Unit_Mtsql 然后就是使用Beautiful ...

  5. python 使用selenium爬取斗鱼直播房间信息

    用到的模块 今天没课,开启正片 selenium 打开浏览器提取数据 time 每打开一个页面睡眠几秒,防止太快报错还有被发现 json 写入文件要用到 完整代码如下(为了减少代码就不使用类了) fr ...

  6. Python爬取斗鱼直播信息

    一.需求 爬取斗鱼直播网站信息,如直播名字.主播名字.热度.图片和房间网址,将这些数据保存到csv文件中,并单独创建文件夹保存图片. 斗鱼直播网址:https://www.douyu.com/g_LO ...

  7. 使用selenium自动爬取斗鱼直播平台的所有房间信息

    使用selenium自动爬取斗鱼直播平台的所有房间信息 文章目录 使用selenium自动爬取斗鱼直播平台的所有房间信息 使用selenium实现动态页面模拟点击 什么是selenium? selen ...

  8. 实时爬取斗鱼直播时的弹幕消息

    最近想爬取实时消息,上网查了下,所以爬取斗鱼直播的弹幕消息做了下练习,这个开源的代码有很多,但是具体是怎么爬取到的还是要仔细地研究下.想爬取斗鱼的弹幕消息,按照常用的做法是打开网页用抓包工具抓包,但是 ...

  9. 使用selenium,xpath,线程池爬取斗鱼主播信息

    使用xpath,线程池爬取斗鱼主播信息: 主要爬取主播昵称,直播内容分类,房间名称,房间号以及人气,共爬取了大概110多页数据,大概15000条,保存在txt文本中, import timefrom ...

最新文章

  1. CVPR2020文章汇总 | 点云处理、三维重建、姿态估计、SLAM、3D数据集等(12篇)
  2. 洛谷P2057 【SHOI2007】善意的投票
  3. html的div的儿子,当父母的身高是动态时,孩子div为100% HTML / CSS
  4. 6410 linux内核移植
  5. 1002 A+B for Polynomials (25分)_29行代码AC
  6. Zend Studio使用教程之升级Zend Studio(1/3)
  7. c++ 一个简单的学生 类
  8. 加密托管机构Komainu与英国当局合作存储没收的加密货币
  9. .netCore2.0 程序集DI依赖注入
  10. C语言库函数学习知识
  11. Nat模拟虚拟机无法ping通桥接模式虚拟机
  12. JS切割截取字符串方法总结
  13. 藏宝阁显示角色可买服务器,梦幻西游藏宝阁里面买角色时选的可转入服务器是不是一定可以转...
  14. 计算机文化基础多选,计算机文化基础多选题..pdf
  15. Imagination官方信息速递2020年11月期
  16. 哈尔滨理工大学第五届ACM程序设计竞赛(热身)
  17. 前端进阶_狂神Vue笔记_语法指令v-bind、v-on、v-for_表单双绑_组件_Axios异步通信_Vue的生命周期_计算属性_插槽 <slot>_webpack使用_vue-router路由
  18. Python 多个线程按先后顺序执行,并保持各子线程和主线程的通信
  19. 18年12月蓝桥杯校赛
  20. 【Promise】基本使用+回调地狱+宏队列与微队列

热门文章

  1. cin.getline和getline区别
  2. “微信”影响力报告:用数据读懂微信五大业务
  3. ThingsBoard教程(六):设备管理
  4. 《代码大全2》第12章 基本数据类型
  5. XML如何添加注释?
  6. 测试思维 PK 测试技术
  7. niushop3.0店铺
  8. 08点餐项目实战之后台店铺信息管理
  9. 计算机考证电子表格怎么做
  10. kernel(三)NAND FLASH