基于python requests库的bilibili爬虫简单尝试以及数据分析及可视化

这篇具有很好参考价值的文章主要介绍了基于python requests库的bilibili爬虫简单尝试以及数据分析及可视化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在初步了解了关于爬虫的课程之后,我也进行了一些自己的尝试。本文将从“爬取BiliBili Vtuber区直播信息为切入点,来探讨requests, re等库的基础应用。在爬取信息之后,本文将通过matplotlib以及pandas库做数据分析以及可视化

爬虫部分

确认url

首先,我们先确认任务:打开Bilibili,在直播分区中选择虚拟主播区

基于python requests库的bilibili爬虫简单尝试以及数据分析及可视化

我们需要获取主播名称以及观看人数的对应信息。

打开f12,切换到Network界面并使用f5刷新,找到与主播信息对应的网页url。

(当然,首先应该查验一下信息是不是直接保存在网页源代码里,在本例中,已提前确认源代码中的信息不完全)

在一阵找寻之后,我们注意到如下信息:

基于python requests库的bilibili爬虫简单尝试以及数据分析及可视化

 使用”在新标签页中打开“之后,我们得到如下内容:

基于python requests库的bilibili爬虫简单尝试以及数据分析及可视化

在其中,我们寻找代表名称以及观看人数的键值对,通过对比数据可以发现,代表名称的是:

 基于python requests库的bilibili爬虫简单尝试以及数据分析及可视化

而代表观看人数的是:

 基于python requests库的bilibili爬虫简单尝试以及数据分析及可视化

 那么接下来,我们需要观察url的规律,其url为:

https://api.live.bilibili.com/xlive/web-interface/v1/second/getList?platform=web&parent_area_id=9&area_id=0&sort_type=sort_type_291&page=1

随着url末尾page的变化,可以对应不同的直播数据,每页实际上存放了20个人的数据,在作者爬取数据时,一共有47页有余。

构造函数

知道了这些之后,我们开始构造函数:

首先是获取html网页的函数:

def getHTMLList(url):
    try:
        r = requests.get(url, headers=kv)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        print("ERROR1")
        return ""

获取了html网页之后,采用正则表达式的方式匹配键值对:

def parsePage(html, info_list):
    try:
        name = re.findall(r'\"uname\"\:\".*?\"', html)
        audience = re.findall(r'\"num\"\:\d*', html)
        for i in range(len(audience)):
            name_str = eval(name[i].split(':')[1])  # eval去掉引号,之后split分开只取右边部分
            audience_str = eval(audience[i].split(':')[1])
            info_list.append([name_str, audience_str])
    except:
        print("")

最后再把爬取的信息储存在xlsx文件当中:

def printStockList(info_list):
    stock_list = pd.DataFrame(info_list, columns=['name', 'audience'])
    stock_list.to_excel("Vtuber直播信息.xlsx")

全部代码

'''
爬取bilibili直播数据
'''

import requests
import re
import pandas as pd


kv = {'user-agent': 'Mozilla/5.0'}


def getHTMLList(url):
    try:
        r = requests.get(url, headers=kv)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        print("ERROR1")
        return ""


def parsePage(html, info_list):
    try:
        name = re.findall(r'\"uname\"\:\".*?\"', html)
        audience = re.findall(r'\"num\"\:\d*', html)
        for i in range(len(audience)):
            name_str = eval(name[i].split(':')[1])  # eval去掉引号,之后split分开只取右边部分
            audience_str = eval(audience[i].split(':')[1])
            info_list.append([name_str, audience_str])
    except:
        print("")


def printStockList(info_list):
    stock_list = pd.DataFrame(info_list, columns=['name', 'audience'])
    stock_list.to_excel("Vtuber直播信息.xlsx")


def main():
    depth = 48
    info_list = []
    for i in range(1, depth):
        try:
            url = "https://api.live.bilibili.com/xlive/web-interface/v1/second/getList?platform=web&parent_area_id=9&area_id=0&sort_type=sort_type_291&page=" + str(i)
            html = getHTMLList(url)
            parsePage(html, info_list)
            print("正在获取第{}页信息".format(i))
        except:
            continue
    printStockList(info_list)

main()

实际上,这个代码只需要简单替换url以及正则表达式便可广泛用于爬取各种数据(当然,对于一些稍有反扒技术的网站,可能就需要对请求头做改变了……)

结果汇总

运行这段代码

基于python requests库的bilibili爬虫简单尝试以及数据分析及可视化

 之后打开保存的xlsx文件,发现已经保存信息:

基于python requests库的bilibili爬虫简单尝试以及数据分析及可视化

 

基于python requests库的bilibili爬虫简单尝试以及数据分析及可视化

 图中展示的是一部分信息

后续讨论

实际上到此为止,爬虫的部分已经完成了。接下来,我们需要讨论一下关于爬虫的问题。

访问https://www.bilibili.com/robots.txt查看b站关于爬虫的限制:

基于python requests库的bilibili爬虫简单尝试以及数据分析及可视化

 发现除了少数浏览器外,b站实际上不允许其他用户进行爬虫。不过在MOOC上的老师说……只要同学们访问的次数/频率没有明显异于人类,乃至于对网站造成负担时,是可以在小范围内进行爬虫的。事实上,python+request库的速度明显较慢,在实际测试中每秒几十个数据也没有显著超过一个人下拉页面所产生的访问量,所以仍然进行了这次爬虫练习。

数据处理部分

接下来打开jupyter notebook,对读取的Excel文件进行一些力所能及的分析与处理

首先是引入需要的库以及配置:

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ["SimHei"]  # 只加这个会导致负号无法显示
plt.rcParams['axes.unicode_minus'] = False  # 这两个设置是为了正确显示汉字

然后读入数据:

df = pd.read_excel("Vtuber直播信息.xlsx")  # 读入数据,保存为DataFrame格式
df.head()  # 查看读入数据(jupyter notebook上的用法……)

基于python requests库的bilibili爬虫简单尝试以及数据分析及可视化

 可见,数据已经读入了

注意一下……这个数据是某日晚上7点半左右的数据,并不一定具有代表性,仅作练习使用,请不要用这些数据为论据发布攻击性信息,感谢~

接下来,分别统计观众数量的中位数以及平均数:

基于python requests库的bilibili爬虫简单尝试以及数据分析及可视化

可见对于每个Vtuber而言,平均有387位观众观看直播,然而关注的中位数却只有34个,即一半的主播观众不到34人。这说明观看人数差距较大,研究观看人数的方差:

基于python requests库的bilibili爬虫简单尝试以及数据分析及可视化 

 也可见方差很大

通过sort_values函数进行排序:

基于python requests库的bilibili爬虫简单尝试以及数据分析及可视化

 排序之后实际上应该更改一下索引,采取了一种略显丑陋的方法:

基于python requests库的bilibili爬虫简单尝试以及数据分析及可视化

之后,我们绘制饼状图,以描述观众的分布,为了方便显示,只选取观众数量前10位的Vtuber进行单独展示,其他人归类到”其他“

 

vtubers = [df["name"][i] for i in range(1,11)]
vtubers.append("其他")

audience = [int(df["audience"][i]) for i in range(1,11)]
audience.append(df["audience"][12:].sum())

plt.pie(audience, labels=vtubers, autopct='%.2f%%', wedgeprops = {'width':0.5})
plt.style.use("bmh")
plt.tight_layout()
plt.show()

最终得到的饼状图如图所示:

基于python requests库的bilibili爬虫简单尝试以及数据分析及可视化

还是有点丑陋……不过也算是完成了 文章来源地址https://www.toymoban.com/news/detail-450607.html

到了这里,关于基于python requests库的bilibili爬虫简单尝试以及数据分析及可视化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用python爬虫爬取bilibili视频

    可以使用 Python 爬虫框架如 Scrapy 来爬取 Bilibili 的视频。首先需要了解 Bilibili 网站的构造,包括数据是如何呈现的,然后构建请求来获取所需的数据。同时需要考虑反爬虫措施,可能需要使用代理 IP 和 User-Agent 等方法来绕过反爬虫机制。 这里提供一个简单的爬取视频标题的

    2024年02月08日
    浏览(31)
  • Python Requests库的POST方法

    Python Requests库的POST方法 随着互联网技术的发展,网络爬虫在各行各业的应用中扮演着重要的角色。而Python中的Requests库,作为一款强大的HTTP请求库,在网络爬虫中有着广泛的应用。其中,POST方法具有提交数据的功能,能够模拟浏览器发送数据到指定的URL地址。 使用Python的

    2024年02月16日
    浏览(56)
  • 基于Python编程实现简单网络爬虫实现

    引言 网络爬虫(英语:web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人。其目的一般为编纂网络索引。 --维基百科 网络爬虫可以将自己所访问的页面保存下来,以便搜索引擎事后生成索引供用户搜索。 一般有两个步骤:1.获取网页内容  2.对获

    2024年01月18日
    浏览(29)
  • python 学习之 request 库的基本使用

    目录 1、基本请求 2、代理设置 3、设置请求参数 4、设置请求头 5、文件的写入与读取 6、遍历请求 txt 内的所有 url 7、其他补充 测试代码: 个人理解: 使用 requests 库我们肯定需要先导入它,使用 import 导入; re 为我们自定义的一个参数,用来接收请求返回的信息,在 pytho

    2024年04月27日
    浏览(21)
  • python接口自动化测试 requests库的基础使用

    目录 简单介绍 Get请求 Post请求 其他类型请求 自定义headers和cookies SSL 证书验证 响应内容 获取header 获取cookies requests库简单易用的HTTP库   格式:  requests.get(url)  注意: 若需要传请求参数,可直接在 url 最后的 ? 后面,也可以调用 get() 时多加一个参数 params ,传入请求

    2023年04月26日
    浏览(38)
  • 软件测试|Python requests库的安装和使用指南

    简介 requests 库是Python中一款流行的HTTP请求库,用于简化HTTP请求的发送和处理,也是我们在使用Python做接口自动化测试时,最常用的第三方库。本文将介绍如何安装和使用requests库,以及一些常见的用例示例。 安装requests库 首先,我们要先安装好Python环境。然后,可以使用

    2024年02月02日
    浏览(36)
  • 基于Python的简单40例和爬虫详细讲解(文末赠书)

    目录 先来看看Python40例 学习Python容易坐牢?  介绍一下什么是爬虫 1、收集数据

    2023年04月20日
    浏览(24)
  • 基于Python的bilibili会员购数据爬取

    一、确定好需要爬取的网站  二、右键检查网页源码,找到所需要爬取的数据所在的位置         通过分析链接可得所需要爬取的数据都在这个页面,并且通过链接可以看到不通的页面page和不通的类型type之间都有差别,可以通过这些差别来爬取不同页面或不同类型的数据

    2024年02月16日
    浏览(25)
  • Python爬虫基础(一):urllib库的使用详解

    Python爬虫基础(一):urllib库的使用详解 Python爬虫基础(二):使用xpath与jsonpath解析爬取的数据 Python爬虫基础(三):使用Selenium动态加载网页 Python爬虫基础(四):使用更方便的requests库 Python爬虫基础(五):使用scrapy框架 urllib是一个python自带的库,不需要手动安装。

    2024年02月08日
    浏览(36)
  • Python3爬虫之 Selenium库的使用

    今天在官网看了下Selenium库,总结了下常用的方法,直接上代码。(沈略环境搭建,网上多得是),新手建议去了解10分钟再来看这里的代码。 这里列举一下常用的查找元素方法:其实find_element_by_xpath是万能的。 单元素定位: find_element_by_name find_element_by_id find_element_by_xpath

    2024年02月11日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包