爬取斗鱼房间号信息-计算在线观看总人数

早就对斗鱼等直播平台的观看人数好奇,今天进来爬取以下斗鱼到底有多少人观看,目前是新冠状病毒时期,看直播的人数应该不会太少,也希望各位保护好自己和自己的家人,祝身体健康。话不多说直接上过程:

第一步构想 使用xpath获取信息

打开谷歌,进入到斗鱼TV的直播页面
在这里插入图片描述
F12 调处谷歌检查窗口,右击页面查看网页源代码,搜索页面中的关键字,如搜索,脑力直播间(图片没显示全),结果如下:
在这里插入图片描述
代表是可以通过xpath进行提取数据的。

这里我们使用第二种方式进行爬取,抓包

点击NetWork窗口,进行抓包,当我们选择第二页时,发现数据包
在这里插入图片描述
抓取到请求:
在这里插入图片描述
发现正好是我们需要用到的数据,请求如下
在这里插入图片描述
那么第一页的数据是不是将后面的2改成1就行了啊,意境尝试,果然如此,如此一来就简单了。下面直接贴出我所有代码,供大家参考。如对xpath提取有兴趣可留言,我到时候再进行补充。

from pprint import pprint

import requests
import json

import time
from openpyxl import Workbook

# 要求 保存每个直播间的房间号 标题  直播类别 主播  观看人数等信息至Excel表格 最后打印出 在斗鱼直播中  在线观看总人数



class DouYuInfo():
    ol_person = 0 # 在线观看人数
    page = 1 # 当前页
    def __init__(self):
        self.wb = Workbook()
        self.ws = self.wb.active
        self.ws["A1"] = "主播"
        self.ws["B1"] = "标题"
        self.ws["C1"] = "房间号"
        self.ws["D1"] = "直播类别"
        self.ws["E1"] = "观看人数"
        self.ws["F1"] = "观看链接"
        self.ws["G1"] = "主播头像"
        self.headers = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36'
        }
        self.douyu_url = "https://www.douyu.com/gapi/rkc/directory/0_0/{}"

    def get_response(self):
        """获取响应"""
        res = requests.get(self.douyu_url.format(DouYuInfo.page), headers=self.headers)
        if res.status_code == 200:
            content = res.content.decode()
            return content
        else:
            print("数据已经请求完毕")
            return

    def get_room_list(self,content):
        """获取房间号信息"""
        data = json.loads(content)
        room_list = data["data"]["rl"]
        return room_list

    def save_msg(self,room_list):
        for room in room_list:
            print("正在保存信息:")
            pprint(room)
            self.ws.append(
                [room["nn"], room["rn"], room["rid"], room["c2name"], room["ol"], "https://www.douyu.com" + room["url"],
                 room["rs16"][:-4:]])
            DouYuInfo.ol_person += int(room["ol"])

    def run_rever(self):
        while True:
            con = self.get_response()
            room_list = self.get_room_list(con)
            self.save_msg(room_list)
            DouYuInfo.page += 1
            print("总人数:%s" % DouYuInfo.ol_person)

            self.wb.save("斗鱼直播信息.xlsx")
            time.sleep(1)

    def __del__(self):
        print("总人数:%s"%DouYuInfo.ol_person)

        self.wb.save("斗鱼直播信息.xlsx")


if __name__ == '__main__':
    douyu = DouYuInfo()
    douyu.run_rever()

最后数据我没有爬取完,因为到后面一些小主播基本没人看,人数基本没啥增加,总结果为:
在这里插入图片描述
总共只爬取了一万多条信息:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值