爬取b站视频评论用户信息!这些评论的才是大神!

利用python做文本分析——以爬取B站视频弹幕评论为例 本篇文章主要运用了机器学习以及Python爬虫以及nlp以及lda主题分析相关的操作内容 本文主要展示实战分析相关内容,关于理论的相关介绍不做过多展开 机器学习根据我的个人理解就是建立相关的模型,利用已有的数据对模型进行相关的训练,不断的丰富模型的准确度和适用范围。从而更加有效高效的解决问题 Python爬虫是利用网页的url链接,使用Python的相关库对网页进行解析并抓取相关的内容,从而便于进一步的分析处理 NLP主题分析和lDA主题分析都是常用的文本分析的方法,通过这两种方法可以对文本所含 阅读详情

最近马保国老师在b站挺火的,关于他的视频播放量很高,b站视频评论区都是人才说话好听,写个爬虫爬取一下b站评论区用户信息和评论内容。

一.准备工作

1.工具

(1)Chrome 谷歌浏览器 安装地址:https://www.google.cn/chrome/ (插件:json-handle 下载地址:http://jsonhandle.sinaapp.com/,json-handle安装方法:

https://blog.youkuaiyun.com/xb12369/article/details/79002208

用于分析网页结构
(2)python 3.x 安装地址:https://www.python.org/ 用于编写代码,开发工具:JetBrains PyCharm Professional下载地址:https://www.jetbrains.com/pycharm/
(3)Mongodb 数据库存储数据 安装地址:https://www.mongodb.com/try/download/community, 数据库可视化工具MongoDB Compass 用于动态管理数据库,安装教程详见:

https://blog.youkuaiyun.com/weixin_41466575/article/details/105326230

二.思路

1.整体思路

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入

2.爬虫思路

三.分析网页

要想写好爬虫,一定要先把网页结构分析透彻。

1.分析网页加载方式

我们要爬取用户信息和评论,所以先打开一个视频。


鼠标右击 查看源代码 ,在源代码中搜索相关评论内容,并没有找到相关数据,可以判断此页面为ajax异步加载数据渲染出来的。

2.分析数据接口

回到视频页面F12打开开发者工具,刷新一下,ctrl+f搜索一下,发现评论数据都在这个json中。


这个json指向了下面这个地址:

https://api.bilibili.com/x/v2/reply?callback=jQuery1720631904798407396_1605664873948&jsonp=jsonp&pn=1&type=1&oid=82179137&sort=2&_=1605664874976

使用jsonhandle查看这个json可以看到用户信息在member里,评论信息在message里。

回到这个接口,此接口需要传以下参数:

callback: jQuery1720631904798407396_1605664873948  #经测试可以不传
jsonp: jsonp  #经测试可以不传
pn: 1  #页码标识
type: 1  #所属类型
oid: 82179137  #视频标识
sort: 2  #所属分类
_: 1605664874976  #当前时间戳,经测试可以不传
1234567

通过分析发现关键参数为oid和pn,sort,个人猜测oid为视频标识,pn为评论所在页数,sort为类别,我们要获取到oid。

3.获取oid

尝试在视频网页源代码中搜索oid。

检索到了7个相关,那就好办了,我们先请求视频网页获取oid,再通过oid去构造加载接口。

这样我们就把视频评论信息加载方式、加载接口搞清楚了,可以去撰写爬虫了。

四.撰写爬虫

废话不说,直接上源码

import json
import requests
import pymongo
import re
import time
import random

class Bilibili_Comment_Parse(object):

    #设置参数,数据根据视频标题不同存在不同的集合中,所有集合存在Bilibili库中
    def set_page(self):
        host='127.0.0.1'
        port=27017
        myclient=pymongo.MongoClient(host=host,port=port)
        mydb='Bilibili'
        sheetname=self.video_title
        db=myclient[mydb]
        self.post=db[sheetname]

    #根据输入的网址获取oid和视频标题
    def get_oid(self,url):
        headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'}
        r = requests.get(url,headers=headers)
        res = r.text
        patten = '<meta data-vue-meta="true" itemprop="url" content="https://www.bilibili.com/video/av(.*?)/">'
        oid = re.findall(patten, res)
        aim_oid = oid[0]
        patten1='<meta data-vue-meta="true" property="og:title" content="(.*?)">'
        video_title=re.findall(patten1,res)
        if video_title:
            self.video_title=video_title[0].split('_哔哩哔哩')[0]
        return aim_oid

    #爬虫主程序,用于解析视频评论用户信息
    def parse(self,oid):
        base_url=f'https://api.bilibili.com/x/v2/reply?jsonp=jsonp&type=1&oid={oid}&sort=2'
        n=0
        url=base_url+'&pn={}'
        headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'}
        try:
            while True:
                r=requests.get(url.format(n),headers=headers)
                _json=json.loads(r.text)
                replies=_json.get('data').get('replies')
                item={}
                n+=1
                if len(replies)!=0:
                    print(f'\033[34;47m--------------------正在爬取{n}页--------------------')
                    for replie in replies:
                        item['user_id']=replie.get('member').get('mid')#用户id
                        item['user_name']=replie.get('member').get('uname')#用户名
                        item['user_sex']=replie.get('member').get('sex')#性别
                        item['user_level']=replie.get('member').get('level_info').get('current_level')#等级
                        vip=replie.get('member').get('vip').get('vipStatus')#是否vip
                        if vip==1:
                            item['user_is_vip']='Y'
                        elif vip==0 :
                            item['user_is_vip']='N'
                        comment_date=replie.get('member').get('ctime')#评论日期
                        timeArray = time.localtime(comment_date)
                        otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
                        item['apprecate_count']=replie.get('like')#点赞数
                        item['reply_count']=replie.get('rcount')#回复数
                        item['comment_date']=otherStyleTime
                        item['comment']=replie.get('content').get('message')#评论内容
                        #判断数据库中有无此文档,也可用于断点续
                        res=self.post.count_documents(item)
                        if res==0:
                            data = dict(item)
                            self.post.insert(data)
                            print(f'\033[35;46m{item}\033[0m')
                        else:
                            print('\033[31;44m pass\033[0m')
                    time.sleep(0.5)
                else:
                    print(f'\033[31;44m--------------------程序在第{n}页正常退出!--------------------\033[0m')
                    break
        except:
            pass

def main():
    while True:
        type = input('请输入视频地址:')
        #使用正则表达式进行简单过滤
        patten1 = re.compile(r'^(?:http|https)?://(\S)*')
        flag= re.findall(patten1, type)
        if flag:
            try:
                bilibili_parse=Bilibili_Comment_Parse()
                oid =bilibili_parse.get_oid(type)
                bilibili_parse.set_page()
                bilibili_parse.parse(oid)
                break
            except:
                print('\033[35;49m您输入信息有误!请检查!\033[0m')
        else:
            print('\033[35;49m您输入信息有误!请检查!\033[0m')


if __name__ == '__main__':
    main()

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102

这里要说一下,开始我用正则判断了一下输入内容,而且我并没有将api所有参数都传过去,像_这样的时间戳可以用time.time()去构造,用户信息的话,可以按需去抽取。

控制台一直在输出数据,直到结束。

五.存储数据

数据存储,我选择mongodb数据库,您可以自行选择存储方式。


一共九千多条,您可自行选择导出数据为json或者csv格式。

六.总结

  • 本次爬取的是b站视频评论用户信息和评论数据,不只适用于马老师这个视频,是通用的。b站对ip访问频率有限制,所以保险起见,加入了限速,此爬虫的重点在于寻找评论api接口,url构造完成以后数据抽取就简单容易了,一共九千多条数据,而视频下面显示1w3K多条应该是包含回复。思路、代码方面有什么不足欢迎各位大佬指正、批评!

 

一个简单的爬取b站up下所有视频的所有评论信息的爬虫 心血来潮搞了一个简单的爬虫,主要是想知道某个人的b站账号,但是你知道,b站在搜索一个用户时,如果这个用户没有投过稿,是搜不到的,,,这时就只能想方法搞到对方的mid,,就是 space.bilibili.com/9444976 后面的那一串数字。偶然看到这个人关注了某个主播,,想到可能这个人会回复主播的视频,于是想着爬到所有up下的视频的评论对应的用户,这样我就可以在数据库里检索昵称得到mid,,... 阅读详情

相关推荐

BiliBili系列(二):个人历史数据爬取与分析

本人的项目,未参考任何博文

爱猫的小学森 4507

python3网络爬虫--爬取b站视频评论用户信息(附源码)

最近马保国老师在b站挺火的,关于他的视频播放量很高,b站视频评论区都是人才说话好听,写个爬虫爬取一下b站评论区用户信息和评论内容。 一.准备工作 1.工具 (1)Chrome 谷歌浏览器 安装地址:https://www.google.cn/chrome/ (插件:json-handle 下载地址:http://jsonhandle.sinaapp.com/,json-handle安装方法: https://blog.youkuaiyun.com/xb12369/article/details/79002208 用于分

懷淰メ的博客 1万+

【Python】使用Python根据BV号爬取对应B站视频下的所有评论(包括评论下的回复)

【Pyton】使用Python根据BV号爬取对应B站视频下的所有评论(包括评论下的回复) 本文写于2020-4-27,当你阅读到本文的时候如果因为下列原因导致本文代码无法正常工作,本人概不负责。 B站的页面和API接口的变动 B站为页面和API加入了反爬虫机制,或者对请求首部有了新的要求 Python版本的变动和标准库的调整 BeautifulSoup4的变动 使用到的库 【第三方库】:Be...

weixin_41429999的博客 7052

python爬虫:Ajax异步爬取数据(b站评论区)

爬虫时遇到很多数据并不在访问网址的返回包里,而是随着用户下拉逐步加载的,也就是用到了Ajax,那么这时我们该如何爬取我们想要的数据呢?

qq_46145027的博客 4157

爬虫实战 - 如何爬取B站视频评论?

步骤 (本次爬虫仅以一个视频为示例:链接) 查找评论请求api 解析URL 去掉第一个和最后一个参数可得评论URL,即:https://api.bilibili.com/x/v2/reply?jsonp=jsonp&pn=1&type=1&oid=585286365&sort=2 【其中pn是页码;sort控制排序顺序,1按时间排序,2按热度排序;oid代码视频编号】 - 开始敲代码 import requests header = {"User-Agent": "M

Totoro1745的博客 7976

python实现B站评论分页爬取

变化的参数为 Jt+wt,这里的wt为固定值。并且采取了md5加密的方式,分析可得Jt的值为en中内容的综合,en内容则为负载中的固定值。2.打开开发者工具,点击网络刷新界面,下滑页面数据让数据加载出来,随便选择一条评论复制,粘贴到开发工具中的搜索框中,找到对应的包。7.这里处理w_rid参数,在源码页面中搜索,w_rid参数,查看所处位置,进行断点检测。5.实现翻页爬取时,找到变化的对应参数。

weixin_51575130的博客 3605

Python爬取B站视频全部评论

Python3爬取B站视频全部评论1.为什么有这篇文章2.相关代码 1.为什么有这篇文章 最近受朋友委托需要爬取B站视频下的评论作为他的分析数据,我上网查了很多相关教程和文章都没有爬取全部的评论,不能满足朋友的需求,只好自己动手,在此分享一下实现代码供大家学习交流。 2.相关代码 通过输入B站视频Bvid号,可以将视频下的评论全部保存到csv文件中。(说明一下:输出显示 总评论数 > 当前评论数,这并不是BUG,而是总评论数包含评论和回复,这里只是爬取了评论。) ```python3 import

github_39611284的博客 1万+

python爬b站评论_一个简单的爬取b站up下所有视频的所有评论信息的爬虫

心血来潮搞了一个简单的爬虫,主要是想知道某个人的b站账号,但是你知道,b站在搜索一个用户时,如果这个用户没有投过稿,是搜不到的,,,这时就只能想方法搞到对方的mid,,就是 space.bilibili.com/9444976 后面的那一串数字。偶然看到这个人关注了某个主播,,想到可能这个人会回复主播的视频,于是想着爬到所有up下的视频的评论对应的用户,这样我就可以在数据库里检索昵称得到mid,,...

weixin_39602737的博客 4601

【2023最新B站评论爬虫】用python爬取上千条哔哩哔哩评论

马哥原创:用python爬取哔哩哔哩的B站评论数据,单个视频可爬上万条。

马哥的专栏 1万+

python用selenium爬取b站评论并制作词云图

文章目录 前言 一、爬取b站评论 1.selenium配置 2.代码 二、制作词云图 1.下载停用词 2.代码 3.注意事项 三、制作成品 1.初期成品 2.成品 前言 b站视频下的评论是下拉加载的。要想爬取所有评论,要么找到加载评论的链接寻找其规律,要么下拉到低等待页面评论全部加载。我小白一个,找不出规律,用下拉这种笨办法。 要是评论太多,下拉要好久,于是上网发现有selenium可以模拟浏览器的各种行为。这个不仅要导入模块,还要下载浏览器驱动...

weixin_44946764的博客 2611

B站评论爬虫--爬取游戏主页评论

由于公司需要监控到不同时间段用户观点的变化,需要爬取各个平台下我们用户的评论,因此,B站评论爬取的需求诞生啦!!~~看了网上的其他教程,都没有我这个类型的(大多数是普通的up上传的视频),我这个呢,是官方游戏主页(也许可以这么叫吧,我也不知道,反正就是从地址上看就不大一样,是http://www.biligame.com开头的) 那么这种特别一点的评论要怎么爬取呢?接下来我们一起来解决吧~ 查找评...

数据小红的博客 2636

Python 网络爬虫实战:爬取 B站《全职高手》20万条评论数据

本周我们的目标是:B站(哔哩哔哩弹幕网 https://www.bilibili.com )视频评论数据。 我们都知道,B站有很多号称“镇站之宝”的视频,拥有着数量极其恐怖的评论和弹幕。所以这次我们的目标就是,爬取B站视频的评论数据,分析其为何会深受大家喜爱。 首先去调研一下,B站评论数量最多的视频是哪一个。。。好在已经有大佬已经统计过了,我们来看一哈! 【B站大数据可视化】B站评论数...

亮出锋芒,剑指苍穹 2万+

【网络安全的神秘世界】解决dvwa靶场报错:Illegal mix of collations for operation ‘UNION‘

我的 information_schema 使用的是 utf8_general_ci。请根据您的实际情况调整字符集。这通常意味着在执行 UNION 操作时,不同字符集的数据发生了混合,导致冲突。修改字符集设置后,重启 MySQL 服务以应用更改,再次测试一下发现成功。查看 information_schema 的字符集。修改 DVWA 数据库字符集。

菜鸟小羊的博客 2044

利用python中的requests模块爬取B站评论

python爬虫 爬取B站评论

不为人知的博客 3378

Infineon MOSFET开关损耗计算实战指南

本文是英飞凌MOSFET开关损耗计算的实战指南。针对MOSFET发热问题,文章深入剖析了开关损耗的产生机理,并基于Infineon数据手册的关键参数,手把手推导了开通与关断损耗的工程计算公式。同时,指南强调了栅极电阻、寄生参数等实际因素对损耗的影响,并提供了从理论计算到实测优化的完整路径,帮助工程师精准评估与优化电源设计。

weixin_29212867的博客 442

专题一:Labview表格控件 及 应用(三)在表格中插入一行数据

专题一:Labview表格控件 及 应用(三) 在表格中插入一行数据 最近一段时间,做试验台上位机编程,老是用到表格控件,这几天抽时间专门写一个表格控件的专题。有用到的朋友可以参考一下。 今天接着讲一下,表格控件的数据插入,和相关的操作 1.表格控件的数据插入原理: 表格控件是一个 2D 字符串数组。 在表格插入一行,就是在2D数组插入一行。 行、列插入类似** 以下以成绩录入为例说明 2.1 不要表头直接插入 知识点1:创建数组:把数学,语文,英语三个数值,连成一个一位数组(数值型)。 知

Labview十年工控_702老师的博客 1万+

利用Request通过bv号爬取B站指定视频下所有评论(IP地址、大会员、等级、一二级评论等等),附带源码和教程

用于爬取Bilibili(B站)视频评论的爬虫,支持爬取一级评论及二级回复,并将数据导出为CSV文件。通过输入视频的BV号,脚本会自动获取视频信息并抓取相关评论,包含用户基本信息、评论内容、IP属地、头像、会员、等级等字段。

onedyer的博客 5212

git clone出现fatal: unable to access Failed to connect to github.com port 443: Timed out解决方案

本文主要介绍了git clone出现fatal: unable to access Failed to connect to github.com port 443: Timed out解决方案,希望能对使用git的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 23万+

年轻小伙竟用python爬取B站视频评论!

大家好,我是啃书君。 今天为大家带来的小demo是爬取B站视频的评论。开始还以为很难,等正真上手的时候发现,也就是那么回事。 高考对于每个人来说都是人生的重大转折点,你考上一所什么样的大学,极大可能改变你未来的人生。因此,读书很重要,读书可以改变自己的命运。 衡水中学的张锡锋,想必很多小伙伴们都认识吧,也是他激励了大多数人的学习热情,他的19年演讲视频在B站已经有1574万的播放量了,最近又出了一个新的视频《无产阶级的孩子跨越阶级的希望》,目前还没有多少人看,没有火起来。因此,我就爬取他在19年衡中的演讲视

weixin_42577686的博客 2691

【教程4>第8章>第10节】OFDM完整通信链路项目的FPGA开发4——插入导频

本文介绍了基于MATLAB和Verilog的导频插入设计与实现方法。首先回顾了MATLAB中导频插入的算法实现,展示了每32个数据插入一个导频的设计。接着详细说明了Verilog硬件实现方案,包括导频序列定义、计数器设计、FIFO模块等关键部分。通过仿真测试验证了设计的正确性,输出了插入导频后的序列、导频序列以及调整时序后的序列。最后提供了相关视频教程资源,帮助读者理解设计过程。该设计实现了数据与导频的精确插入,为OFDM等通信系统开发提供了实用参考。

FPGA/MATLAB学习教程/源码/项目合作开发 395

100天精通Python(基础篇)——第1天:Python从起源到应用的全面解析(附上Python、PyCharm、VSCode下载安装详细教程)

100天精通Python(基础篇)——第1天:Python从起源到应用的全面解析(附上Python、PyCharm、VSCode下载安装详细教程)

努力让自己发光,对的人才能迎着光而来 101万+

B站视频评论数据爬取

使用Python爬取B站视频评论数据的技术方案。通过分析B站API接口,使用requests模块发送请求获取JSON数据,解析用户ID、昵称、性别、地区、评论内容等信息。针对翻页问题,深入研究了w_rid参数的生成机制,发现其采用固定密钥和MD5加密方式。文章还提供了完整的爬取流程,包括请求头设置、参数分析、数据解析和CSV存储方法,并给出了反爬处理建议。该方案适用于批量获取B站视频评论数据,为后续的评论分析提供数据支持。

2302_77177300的博客 1588

Playwright MCP:开启浏览器自动化的新篇章

在当今数字化时代,浏览器自动化技术在众多领域发挥着至关重要的作用,从简单的网页爬取到复杂的自动化测试,再到智能代理与网页的交互等场景,都离不开高效、可靠的浏览器自动化工具。而微软推出的项目,正是在这一领域的一次创新性探索,它为开发者带来了全新的视角和强大的功能支持。本文将深入探讨的概念、架构、代码示例、应用场景、注意事项以及未来发展方向,帮助读者全面了解这一前沿技术。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 5263

python爬虫爬取B站评论

打开开发者工具,下滑页面数据让数据加载出来,随便选择一条评论复制,粘贴到开发工具中的搜索框中,找到对应的包。爬取当前页面的评论信息,用户昵称,性别,前面,内容,发布时间,归属地等。在这里随便点开B站首页推送的一个视频内容。当前页面的评论信息在 replies中。这里使用requests方法。爬取结果保存为csv文件。2.发送请求,访问网址。4.持久化存储,保存在。

weixin_51575130的博客 7328

置顶必读(1) |《YOLOv11实战:从入门到深度优化》专栏导读,带你一文了解本专栏!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏,该专栏专注于分享我在YOLOv8目标检测模型中的实战经验,涵盖从入门基础到深度优化的全方位解决方案。无论你是计算机视觉的新手,还是具有多年深度学习经验的专家,本专栏都将为你提供高效、可复现的技术方案,助你掌握YOLOv8的核心技术,提升目标检测性能,突破瓶颈,优化模型,并加速项目开发🚀!

**My Coding Family** 12万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

我用Python爬取了B站3948评论,围观最近超火的“杀疯了!这就是国家队的美貌吗?”评论区

技术上碾压对手 颜值上惊艳对手 中国奥运健儿们真是又美又能打! 带你一看 中国运动员颜值有多高 需求分析 网友们都在微博上说了啥? 看这里 ▼ 之气那我们也有分析过B站的弹幕,有兴趣的小伙伴可以看看这里 爬虫B站弹幕| 考完试,这辈子,这个班,基本是聚不齐了...... 首先我们打开B站找到我们要找的视频。 F12打开浏览器开发者模式,找到如下链接。 经过测试发现,目前它是通过Js经行渲染的,想通了这一点,那就可以马上去找接口了。 可以看到我们所有爬取

qq_36807888的博客 8万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: 被迫营业的网店订单管理系统!表弟的毕设!这也太简单了!
下一篇: 使用python对全球最新疫情情况进行可视化地图绘制!
pythonlaodi
博客等级 码龄6年 286粉丝 244原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值