首页 > 其他分享 >playwright获取B站用户评论

playwright获取B站用户评论

时间:2024-01-15 20:07:16浏览次数:30  
标签:playwright res self 用户 comments 获取 json data page

一、简介

使用自动化工具playwright获取B站视频下方评论区的用户名、用户性别、评论内容以及IP属地。

playwright获取B站用户评论_爬虫

playwright获取B站用户评论_playwright_02

二、获取思路

进入视频页面,在Network中,发现评论文件存储在“main?oid=XXXX”中,且随着鼠标不断下滑,不断更新。

playwright获取B站用户评论_playwright_03

playwright获取B站用户评论_爬虫_04

那么,我们只需要设置模拟用户鼠标操作,且在下滑过程中设定好监听事件,不断获取评论内容并保存。直到下拉到评论的底部。解析获取到的json文件。

def monitor_response(self, res):
        if "api.bilibili.com/x/v2/reply/wbi/main?oid=" in res.url:
            data = res.json()["data"]["replies"]
            index = res.url[-10:]
            self.comments_message[index] = data

三、完整代码

首先得进入到b站首页手动登录。

playwright获取B站用户评论_playwright_05

(这一步骤在之前python+playwright爬取招聘网站_进击no猪排的技术博客_51CTO博客 中的 二(二)②Ⅱ 有类似的介绍。)

获取评论json文件

# bilibi_comments.py

from playwright.sync_api import sync_playwright
import json
class comments_links_scrapy():
    def __init__(self):
        self.url = input("请将网址粘贴到此处:")
        self.comments_message = {}
        
    def monitor_response(self, res):
        if "api.bilibili.com/x/v2/reply/wbi/main?oid=" in res.url:
            data = res.json()["data"]["replies"]
            index = res.url[-10:]
            print(res.url)
            self.comments_message[index] = data

    def scrapy(self):
        try:
            with sync_playwright() as p:
                browser = p.chromium.connect_over_cdp('http://localhost:12345/')
                page = browser.contexts[0].pages[0]
                page.on("response", self.monitor_response)
                page.goto(self.url)
                page.wait_for_timeout(3000)

                previous_height = 0
                while True:
                    current_height = page.evaluate('document.documentElement.scrollHeight')
                    if previous_height < current_height:
                        previous_height = current_height
                        page.evaluate('window.scrollTo(0, document.body.scrollHeight)')
                        page.wait_for_timeout(1000)
                    else:
                        break
                with open(f"comments.json", mode="a", encoding="utf-8") as fp:
                    json.dump(self.comments_message, fp)

                browser.close()

        except Exception:
            pass

if __name__ == '__main__':
    test = comments_links_scrapy()
    test.scrapy()

解析json文件另存为csv文件

# get_comments.py

import json
import csv

with open("comments.json", "r", encoding="utf-8") as f:
    data = json.loads(f.read())

with open('comments.csv', 'w', newline='', encoding='utf-8-sig') as f2:
    colnames = ['用户名', '用户性别', '评论内容', 'IP属地']
    writer = csv.DictWriter(f2, fieldnames=colnames)
    writer.writeheader()
    for item in data:
        for i in data[item]:
            writer.writerow({
                '用户名': i["member"]["uname"],
                '用户性别': i["member"]["sex"],
                '评论内容': i["content"]["message"],
                'IP属地': i["reply_control"]["location"][5:]
            })

(纯练练手,抓取过程似乎不太稳定。)

标签:playwright,res,self,用户,comments,获取,json,data,page
From: https://blog.51cto.com/goku0623/9256984

相关文章

  • mysql8.0用户与权限管理
    1、用户管理1.1、密码过期策略在MySQL中,数据库管理员可以手动设置账号密码过期,也可以建立一个自动密码过期策略。过期策略可以是全局的,也可以为每个账号设置单独的过期策略。ALTERUSERuserPASSWORDEXPIRE;练习:ALTERUSER'kangshifu'@'localhost'PASSWORDEXPIRE;......
  • Django rest_framework用户认证和权限
    完整的代码https://gitee.com/mom925/django-system使用jwt实现用户认证pipinstalldjangorestframework-simplejwt重新定义一下User类classUsers(AbstractUser):classMeta:db_table="system_users"verbose_name="用户表"......
  • Qt:获取WIFI列表
    示例:使用QT来获取Windows电脑WIFI列表中所有WIFI的名称,实际是执行CMD命令来完成(netshwlanshownetworks) //获取WIFI列表QProcessprocess;process.start("netshwlanshownetworks");process.waitForStarted();process.waitForFinished();QStringcmd_res_text=QSt......
  • vue3使用 vant ui 3 如何获取组件 popup dom的高度?
    我目前使用的是vant-ui 3.1.2popup弹出层组件,我想要获取弹出层的高度来计算一些东西,但是使用常规定义refdom的方式总是无法获取,最终找到方案如下:vant-ui官方文档:https://vant-contrib.gitee.io/vant/v3/#/zh-CN/popup<template><van-popupv-model:show="show......
  • windows映射网络驱动器,如何更换用户名?
    由于我的两台电脑用户名一样,所以直接不用做任何修改,用自己这台电脑的默认用户名就行。但是我为了安全,我想新建一个专门用来远程访问的普通用户,可是我发现无论如何都连不上,今天终于解决了,记录一下。首先,本地电脑在windows凭据管理器中删除windows凭据,然后在注册表中搜索远程IP,把......
  • Windows实现多用户同时远程连接
    效果以下的步骤Win10和Win11是一样的,只需要在被控端设置,连接的电脑无需设置。添加用户设置-》家庭与其他用户-》将其他人添加到这台电脑-》我没有这个人的登录信息也可以使用Win键+R然后输入Lusrmgr.msc或者controluserpasswords2来添加新用户,这里就不赘述了。给用户添......
  • js 获取 url 中的参数
    方法一: functiongetParam(name){varreg=newRegExp("(^|&)"+name+"=([^&]*)(&|$)");varr=window.location.search.substr(1).match(reg);if(r!=null)returnunescape(r[2]);returnnull;}//例如网址是 ht......
  • 嵌入式软件开发人员有必要学习系统移植的知识吗?【ppt获取见文末】
    《从零开始学ARM》的配套视频说明为了让粉丝更好的学习我的新书里面的知识,一口君特地录制了配套学习视频,《从0学ARM第一期》《从0学ARM第一期》视频已经免费发布在B站,而书中除了ARM汇编、裸机开发等知识,还涉及到系统移植的一些知识点所以一口君干脆录制了一期《系统移植......
  • 快乐学Python,数据分析之使用爬虫获取网页内容
    在上一篇文章中,我们了解了爬虫的原理以及要实现爬虫的三个主要步骤:下载网页-分析网页-保存数据。下面,我们就来看一下:如何使用Python下载网页。1、网页是什么?浏览器画网页的流程,是浏览器将用户输入的网址告诉网站的服务器,然后网站的服务器将网址对应的网页返回给浏览器,由浏览器将......
  • 掌握用户心理:通过ClkLog打造精准用户画像(下)
    接《掌握用户心理:通过ClkLog打造精准用户画像(上)》继续为大家分享......二、用户旅程的分析当用户离开时,利用RARRA模型可以帮助我们找到潜在的漏洞,并指导我们在哪里投资于数据测试和购买来优化用户体验。留存阶段的分析深入分析用户流失的时间点和原因至关重要。通过监测......