爬取b站任意视频下的所有评论【附完整代码】

这篇具有很好参考价值的文章主要介绍了爬取b站任意视频下的所有评论【附完整代码】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天花了一上午探究如何用selenium获取b站视频下面的评论,一开始只是想用一个视频来练练手,后面逐渐改成了所有视频都适用的完整代码。

话不多说,直接上源码:

因为我是用的jupyter,所以整个代码包括两个部分。下面这段代码用于完成获取自动登录b站所需的cookie。

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import json

browser = webdriver.Chrome()
browser.get("https://www.bilibili.com")
browser.delete_all_cookies()
time.sleep(20)
dictions = browser.get_cookies()
jsons = json.dumps(dictions)

with open("b站cookie.txt", 'w') as f:
    f.write(jsons)
browser.quit()

下面是第二段代码,具体讲解我会放在b站上。地址在评论区中。下面的代码大家可以直接运行,还可以更换视频地址。

from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import StaleElementReferenceException
import time
import json

browser = webdriver.Chrome()

# 登录并加载视频页面
def login_in(browser):
    # 进入要爬取的页面
    browser.get("https://www.bilibili.com/video/BV1Xu4y117t9/?spm_id_from=333.999.0.0&vd_source=01e74f1ac8f918c9ada8b2cb79b8c6c8")
    f = open("b站cookie.txt", 'r')
    cookie = json.loads(f.read())

    # 利用cookie自动登录账号
    for i in cookie:
        browser.add_cookie(i)
    browser.refresh()
    time.sleep(10)    # 让网页加载完毕,防止后面找元素没找到(这里卡了我1个多小时)

# 滑动页面的操作
def slip_page(browser):
    # browser: 驱动器对象
    document = browser.execute_script('return document.body.scrollHeight;') # 滑动之前的页面高度
    time.sleep(2)
    browser.execute_script(f'window.scrollTo(0,{document})') # 滑动页面
    time.sleep(2)
    document2 = browser.execute_script('return document.body.scrollHeight;')# 滑动之后的页面高度
    
# 获取子评论内容函数
def get_content(reply, attr):
    # reply: 找到的评论元素
    # attr: 页面中对应的类属性
    for i in reply:
        sub_reply = i.find_element(By.CLASS_NAME, 'reply-content')
        if sub_reply.text is None:
            pass
        else:
            print("子评论:" + sub_reply.text)

# 获取已加载的所有评论函数
def get_comments(browser):
    # 1.登录b站,找到对应视频页面
    login_in(browser)
    
    # 2. 加载当前页面出现了的所有评论
    comment_area = browser.find_element(By.CSS_SELECTOR, '#comment > div > div > div > div.reply-warp > div.reply-list')
    reply_items = comment_area.find_elements(By.CLASS_NAME, 'reply-item')    # 获得了当前加载的评论,不是所有评论(动态加载)
    
    while True:
        for item in reply_items:
            """
            这里有个逻辑:
            如果一条评论没有查看更多按钮:
                那么直接去获取内容
            如果有查看更多按钮则进行点击:
                如果点击完查看更多按钮,没有别的内容:
                    则跳到下一条评论
                如果点击完还有“下一页”按钮,则点击下一页按钮:
                    如果点击完下一页按钮 ,还有下一页按钮,则继续点击
                    如果点击完下一页按钮,没有下一页按钮,则跳到下一条评论
            """
            # 子评论中没有查看更多,直接获取内容
            view_more = item.find_elements(By.CLASS_NAME, 'view-more-btn')
            if len(view_more) == 0:
                sub_replys = item.find_elements(By.CLASS_NAME, 'sub-reply-item')
                get_content(sub_replys, "reply-content")
            # 子评论区有查看更多,则先找到这个按钮并点击
            elif len(view_more) != 0:
                browser.execute_script("arguments[0].click();", view_more[0])
                time.sleep(3)    # 等待3秒页面更新
                sub_replys = item.find_elements(By.CLASS_NAME, 'sub-reply-item')    # 找到这一页完整的子评论
                get_content(sub_replys, "reply-content")
                # 循环判断有无下一页按钮
                while True:
                    pagination_btn = item.find_elements(By.CLASS_NAME, 'pagination-btn')
                    # 如果这条评论没有下一页子评论,则结束循环,获取完主评论后跳到下一条评论
                    if len(pagination_btn) == 0:
                        break
                    # 如果有下一页,则点击下一页
                    elif len(pagination_btn) != 0:
                        # 这里会有3种情况,分别是“只有下一页”、“上一页+下一页”、“只有上一页”

                        # 针对只有上一页,则退出循环
                        if len(pagination_btn) == 1 and pagination_btn[0].text == "上一页":
                            break
                        time.sleep(3)   # 等待网页加载
                        print(pagination_btn)

                        # 针对只有下一页,则点击第一个按钮,即下一页
                        if len(pagination_btn) == 1 and pagination_btn[0].text == "下一页":
                            browser.execute_script("arguments[0].click();", pagination_btn[0])
                            time.sleep(3)    # 等待网页加载
                            sub_replys = item.find_elements(By.CLASS_NAME, 'sub-reply-item')    # 找到这一页完整的子评论
                            get_content(sub_replys, "reply-content")

                        # 针对有上一页和下一页,我们要点击第二个按钮,也就是下一页
                        if len(pagination_btn) == 2:
                            browser.execute_script("arguments[0].click();", pagination_btn[1])
                            time.sleep(3)    # 等待网页加载
                            sub_replys = item.find_elements(By.CLASS_NAME, 'sub-reply-item')    # 找到这一页完整的子评论
                            get_content(sub_replys, "reply-content")

            # 不要忘记主评论的内容
            root_reply = item.find_element(By.CSS_SELECTOR, 'span[class="reply-content"]').text
            if root_reply is None:
                pass
            else:
                print("主评论:" + root_reply)
            
            # 当前加载的评论全部获取完毕,需要滑动页面,并获得新加载的评论
            browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
            reply_items = comment_area.find_elements(By.CLASS_NAME, 'reply-item')

get_comments(browser)

觉得对你有帮助的话就点赞收藏加关注吧!文章来源地址https://www.toymoban.com/news/detail-763701.html

到了这里,关于爬取b站任意视频下的所有评论【附完整代码】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Python爬虫—爬取微博评论数据

    今日,分享编写Python爬虫程序来实现微博评论数据的下载。 具体步骤如下👇👇👇: Step1 :电脑访问手机端微博_https://m.weibo.cn/_ Step2 :打开一条微博_https://m.weibo.cn/detail/4907031376694279_ Step3 :URL地址中的_49070__31376694279_就是需要爬取的微博ID Step4 :将ID填写到_main_下即可,也支

    2024年03月21日
    浏览(17)
  • Python如何运用爬虫爬取京东商品评论

    打开京东商品网址(添加链接描述) 查看商品评价 。我们点击评论翻页,发现网址未发生变化,说明该网页是动态网页。 我们在 浏览器右键点击“检查” ,,随后 点击“Network” ,刷新一下,在搜索框中 输入”评论“ ,最终找到 网址(url) 。我们点击Preview,发现了我们需要

    2024年02月07日
    浏览(20)
  • 【爬虫实战】用Python采集任意小红书笔记下的评论,爬了10000多条,含二级评论!

    目录 一、爬取目标 二、爬虫代码讲解 2.1 分析过程 2.2 爬虫代码 三、演示视频 四、获取完整源码 您好!我是@马哥python说 ,一名10年程序猿。 我们继续分享Python爬虫的案例,今天爬取小红书上指定笔记(\\\"巴勒斯坦\\\"相关笔记)下的评论数据。 老规矩,先展示结果: 截图1:

    2024年02月06日
    浏览(11)
  • 爬虫练习-爬取豆瓣网电影评论用户的观影习惯数据

    以豆瓣当下实时热门电影《热烈》作为分析对象 环境: Python3(Anaconda3) PyCharm Chrome浏览器 主要模块: BeautifulSoup requests pymysql 一.概括 目标:获得电影《热烈》的用户观影习惯数据 代码概括: 1.使用requests和bs4爬取电影《热烈》所有短评长评及其用户                           

    2024年02月14日
    浏览(14)
  • 【2023最新B站评论爬虫】用python爬取上千条哔哩哔哩评论

    您好,我是 @马哥python说,一枚10年程序猿。 之前,我分享过一些B站的爬虫: 【Python爬虫案例】用Python爬取李子柒B站视频数据 【Python爬虫案例】用python爬哔哩哔哩搜索结果 【爬虫+情感判定+Top10高频词+词云图】\\\"谷爱凌\\\"热门弹幕python舆情分析 但我学习群中小伙伴频繁讨论

    2024年02月08日
    浏览(13)
  • 【Python】爬虫练习-爬取豆瓣网电影评论用户的观影习惯数据

    目录 前言 一、配置环境 1.1、 安装Python 1.2、 安装Requests库和BeautifulSoup库 1.3.、安装Matplotlib 二、登录豆瓣网(重点) 2.1、获取代理 2.2、测试代理ip是否可用 2.3、设置大量请求头随机使用 2.4、登录豆瓣网 三、爬取某一部热门电影数据 3.1、爬取全部长、短评论 3.2、获取用户

    2024年02月09日
    浏览(11)
  • 【爬虫GUI】YouTube评论采集软件,突破反爬,可无限爬取!

    目录 一、背景介绍 1.1 软件说明 1.2 效果演示 二、科普知识 2.1 关于视频id 2.2 关于评论时间 三、爬虫代码 3.1 界面模块 3.2 爬虫模块 3.3 日志模块 四、获取源码及软件 你好,我是@马哥python说 ,一名10年程序猿。 最近我用python开发了一个GUI桌面软件,作用是爬取YouTube指定视频

    2024年02月11日
    浏览(10)
  • 用python语言爬虫爬取微博评论--上--初步爬虫(超详细版,大学生不骗大学生)

    目录 一、找到页面  二、学会使用检查元素 2.1 打开检查元素界面 2.2 找到所有评论所在的位置 2.2.1 搜索评论 2.2.2  找到data表 三、基础部分代码实现 ​​​​​​​ 全部已经更完(下面两个链接是中和下) https://blog.csdn.net/m0_68325382/article/details/137234661?spm=1001.2014.3001.5502 爬

    2024年04月10日
    浏览(20)
  • Lua从电脑端爬取短视频评论并作商业化分析

    之前有个大客户让我写一篇关于抓取短视频评论数据的单子,说是帮助公司寻找意向客户以及所对应产品在短视频里面的展现以及热门程度,通过数据采集方式并作数据自动化分析,从而实现商业上的价值。对于我来说写个爬虫还不简单,通过三个周末加班终于完成项目。数

    2024年01月20日
    浏览(12)
  • 【爬虫实战】用python爬取微博任意关键词搜索结果、exe文件

    项目功能简介: 1.交互式配置; 2.两种任意来源(直接输入、本地文件); 3.自动翻页(无限爬取); 4.指定最大翻页页码; 5.数据保存到csv文件; 6.程序支持打包成exe文件; 7.项目操作说明文档; 一.最终效果 视频演示: 用python爬取微博搜索结果、exe文件

    2024年02月02日
    浏览(28)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包