爬取B站评论:Python技术实现详解

引言

在当今信息爆炸的互联网时代,用户生成的内容不断涌现,其中包括了各种各样的评论。而B站作为一个充满活力的视频分享平台,其评论区更是一个充满了各种各样精彩评论的宝藏地。那么,有没有一种简单的方法可以将这些评论收集起来呢?答案是肯定的!本文将介绍如何使用Python编写一个爬虫程序,轻松实现爬取B站视频的评论,为我们探索互联网数据的奥秘带来便利。

什么是爬虫?

在开始之前,我们先来了解一下什么是爬虫。爬虫,又称网络爬虫、网络蜘蛛,是一种按照一定的规则,自动地获取万维网信息的程序或脚本。简单来说,就是通过编写代码,让计算机自动地从网页上抓取需要的信息。而Python作为一种简洁、易学的编程语言,非常适合用来编写爬虫程序。

准备工作

在开始爬取B站评论之前,我们需要做一些准备工作:

  1. Python环境:确保你的电脑上已经安装了Python,并且能够正常运行。
  2. 编辑器:推荐使用VS Code、PyCharm等编辑器来编写Python代码,方便调试和管理。
  3. 第三方库:我们将使用requests库发送HTTP请求,以及beautifulsoup4库解析HTML页面。你可以使用以下命令来安装这两个库:

编写爬虫程序

第一步:获取评论页面URL

首先,我们需要找到要爬取评论的视频页面,并获取其评论页面的URL。通常,B站视频的评论页面URL格式为https://www.bilibili.com/video/avXXXXXX/#reply,其中avXXXXXX是视频的av号。我们可以通过拼接URL的方式来构造评论页面的URL。

第二步:发送HTTP请求获取页面内容

有了评论页面的URL之后,我们就可以使用requests库发送HTTP请求,获取页面的HTML内容。
第三步:完整代码实现

import requests
import json
import os
import pickle
from bs4 import BeautifulSoup
import time# 设置请求头部信息,伪装成浏览器访问
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}# 设置代理信息
proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "16QMSOML"
proxyPass = "280651"
proxyMeta = f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"# 登录B站后获取的cookies,用于自动登录
cookies_file = 'cookies.pkl'# 保存进度的文件名
progress_file = 'progress.txt'# 保存评论的文件夹名
comment_dir = 'comments'# 创建保存评论的文件夹
if not os.path.exists(comment_dir):os.makedirs(comment_dir)# 加载cookies
if os.path.exists(cookies_file):with open(cookies_file, 'rb') as f:cookies = pickle.load(f)
else:cookies = Nonedef login():"""手动登录B站,获取cookies"""print("请手动登录B站,并复制cookies到cookies.pkl文件中。")def get_video_id(url):"""从视频网址中提取视频ID"""return url.split('/')[-1]def get_comments(video_url):"""爬取视频的评论"""video_id = get_video_id(video_url)comment_file = os.path.join(comment_dir, f'{video_id}.csv')if os.path.exists(comment_file):print(f"评论文件 {comment_file} 已存在,跳过该视频。")return# 请求视频页面,获取评论接口response = requests.get(video_url, headers=headers, cookies=cookies, proxies={"http": proxyMeta, "https": proxyMeta})soup = BeautifulSoup(response.text, 'html.parser')script = soup.find('script', attrs={'type': 'application/ld+json'})video_data = json.loads(script.text)api_url = video_data['comment']['embedUrl']# 循环获取评论,直到获取完所有评论page = 1comments = []while True:api = f'{api_url}&pn={page}&type=1'response = requests.get(api, headers=headers, cookies=cookies, proxies={"http": proxyMeta, "https": proxyMeta})data = response.json()if 'data' in data and data['data']['replies']:comments.extend(data['data']['replies'])page += 1time.sleep(1)  # 避免请求过于频繁被封IPelse:break# 保存评论到CSV文件with open(comment_file, 'w', encoding='utf-8') as f:f.write('一级评论计数,隶属关系,被评论者昵称,被评论者ID,评论者昵称,评论者用户ID,评论内容,发布时间,点赞数\n')for comment in comments:content = comment['content']['message']content = content.replace('\n', ' ')like = comment['like']publish_time = comment['ctime']f.write(f'1, , , , , ,"{content}",{publish_time},{like}\n')if 'replies' in comment:for reply in comment['replies']:content = reply['content']['message']content = content.replace('\n', ' ')like = reply['like']publish_time = reply['ctime']f.write(f'2,{comment["mid"]},{reply["member"]["uname"]},{reply["member"]["mid"]},'f'{reply["member"]["uname"]},{reply["member"]["mid"]},"{content}",{publish_time},{like}\n')print(f"成功爬取视频 {video_id} 的评论,保存在 {comment_file} 中。")def main():# 读取视频列表with open('video_list.txt', 'r') as f:video_urls = f.readlines()# 批量爬取视频评论for url in video_urls:url = url.strip()get_comments(url)if __name__ == '__main__':if cookies is None:login()main()

总结

  • 批量爬取多个视频的评论:只需将要爬取的视频网址写入video_list.txt文件中,程序会自动遍历网址列表,爬取每个视频的评论,并保存到以视频ID命名的CSV文件中。
  • 只需一次登录:手动登录B站一次后,程序会自动保存cookies,下次运行程序时无需再次登录,确保持续爬取评论数据。
  • 断点续爬:程序支持断点续爬功能,如果中断了爬虫,下次运行时会根据progress.txt文件中的进度继续爬取评论,并且已经写入一半的CSV文件也会继续写入,避免数据丢失。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/6404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型日报2024-05-03

大模型日报 2024-05-03 大模型资讯 马克扎克伯格宣布Meta发布Llama 3大型语言模型的重大AI新闻 摘要: Meta公司在周四发布了其Llama 3大型语言模型的首两个版本。该模型是Meta AI的动力核心,马克扎克伯格称其为“未来的...”。这一进展标志着Meta在人工智能领域的进…

深度学习心得

1. KL loss 其经常要与softmax一起使用,就是为了学习one-hot分布 2. 降维 Pooling层的作用是增加模型的鲁棒性,让模型对输入的少量变化不那么敏感。 如果真想通过降维,减少模型训练参数,那应该用PCA降维方法, skl…

Java中new一个对象内存区域如何变化?顺序是什么?

Java中new一个对象内存区域如何变化?顺序是什么? 如果你对Java内存区域了解的话,那么肯定会知道,创建对象如果是第一次的话,首先肯定是要加载对应的Class(要创建对象的类),加载的类信息就是放在…

贪心-耍杂技的牛

问题描述 农民约翰的 N头奶牛(编号为 1…N)计划逃跑并加入马戏团,为此它们决定练习表演杂技。 奶牛们不是非常有创意,只提出了一个杂技表演: 叠罗汉,表演时,奶牛们站在彼此的身上,形…

Django之配置数据库

一,创建项目 二,将项目的setting.py中的 DATABASES {default: {ENGINE: django.db.backends.sqlite3,NAME: BASE_DIR / db.sqlite3,} }替换成如下(以mysql为例) DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: …

力扣---二叉树的锯齿形层序遍历

给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 示例 1: 输入:root [3,9,20,null,null,15,…

基于深度学习神经网络的AI图片上色DDcolor系统源码

第一步:DDcolor介绍 DDColor 是最新的 SOTA 图像上色算法,能够对输入的黑白图像生成自然生动的彩色结果,使用 UNet 结构的骨干网络和图像解码器分别实现图像特征提取和特征图上采样,并利用 Transformer 结构的颜色解码器完成基于视…

PDF Shaper Ultimate 免安装中文破姐版 v14.1

软件介绍 PDF Shaper是一套完整的多功能PDF编辑工具,可实现最高的生产力和文档安全性。它允许你分割,合并,水印,署名,优化,转换,加密和解密您的PDF文件,也可插入和移动页&#xff0…

数字化思维的目的与价值,你真的懂吗?

在这个数字时代,数字化思维正逐渐成为企业和个人的能力。那么,数字化思维究竟以什么为中心?为了达成什么目的?又具有怎样的价值呢?让我们一起来揭开这个神秘的面纱。 数字化思维以数据为中心。数据成为了决策的关键依据…

Python系列一之excel的读取

这里我常用的 python 对于 excel 的读取库有两个,一个是 xlsxwriter 用于操作 excel 的写入,一个是 xlrd 用于 excel 文件的读取。 使用的库的版本如下: xlsx1.2.6xlrd1.1.0 xlsxwriter 写入 excel 新建一个 excel import xlsxwriterpat…

C语言实验-学生信息管理系统

按以下菜单界面编写学生信息管理系统; 1)录入学生信息首先输入学生人数,然后根据学生人数开辟动态数组; 2)学生信息包括学号、姓名、性别、三门课成绩、总分;其中学号、姓名、 性别、三门课成绩是需要从键盘…

初始《stack》《queue》及手搓模拟《stack》《queue》

目录 前言: stack的介绍和使用 stack的介绍: ​编辑stack的使用: ​编辑stack的模拟实现: queue的介绍和使用 queue的介绍: queue的使用: queue的模拟实现: priority_queue的介绍和使用 priority_queue的介绍:…

mysql先行笔记

mysql笔记 数据库:DataBase 简称:DB 按照一定格式存储数据的一些文件的组合 数据库管理系统: DataBaseManagement,简称:DBMS 专门用来管理数据库中的数据,可以对数据库中的数据进行增删改查 常见的数据库管理系统&am…

Hdfs小文件治理策略以及治理经验

小文件是 Hadoop 集群运维中的常见挑战,尤其对于大规模运行的集群来说可谓至关重要。如果处理不好,可能会导致许多并发症。Hadoop集群本质是为了TB,PB规模的数据存储和计算因运而生的。为啥大数据开发都说小文件的治理重要,说HDFS 存储小文件…

08 - 步骤 表输出

简介 表输出(Table Output)步骤是用于将 Kettle 中的数据写入关系型数据库表的步骤。它允许用户将数据流中的数据插入、更新或删除到目标数据库表中。 使用 场景 我要将处理完的数据流中的sysOrgCode 跟 plateNumber 保存记录到mysql 1、拖拽表输出…

Java Jackson-jr 库使用介绍

介绍 Jackson-jr 是一个轻量级的Java JSON 处理库。这个库被设计用来替代 Jackson 的复杂性。对比 Jackson 的复杂 API,Jackson-jr 的启动速度更快,包大小更小。 虽然Jackson databind(如ObjectMapper)是通用数据绑定的良好选择…

QT, 查看局域网在线主机网卡的出厂商

如题 , 通过QProcess获取到的局域网mac地址,使用QNetworkReply (记得要QT network)可以获取其对应的生产产商(将mac地址传入某专门查询mac地址厂商的网站,并分析其返回值,获得结果,…

初学python记录:力扣1235. 规划兼职工作

题目: 你打算利用空闲时间来做兼职工作赚些零花钱。 这里有 n 份兼职工作,每份工作预计从 startTime[i] 开始到 endTime[i] 结束,报酬为 profit[i]。 给你一份兼职工作表,包含开始时间 startTime,结束时间 endTime …

001 登录(md5加密)

文章目录 pom.xmlLoginController.javaUserMapper.javaUser.javaUserServiceImpl.javaUserService.javaMD5Util.javaMD5UtilTest.javaValidatorUtil.javaLoginVo.javaRespBean.javaRespBeanEnum.javaSeckillApplication.javaUserMapper.xmllogin.htmlapplication.yamlsql 传统方…

ROS服务器通信

目录 一、角色 二、流程 注意 三、例子描述 四、srv文件 编译配置文件 vscode配置 五、Server.cpp编写例子 编写CMakeList 六、观察server的效果 七、Client编写例子 编写CMakeList 八、观察Client的结果 九、Client优化(动态输入) 了解argc…