多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

影刀RPA新手教程:B站数据采集实战——视频信息与评论批量抓取

影刀RPA新手教程:B站数据采集实战——视频信息与评论批量抓取 影刀RPA新手教程B站数据采集实战——视频信息与评论批量抓取认识影刀与安装影刀下载去官网装就行别装C盘路径有中文后面一堆坑。装完第一件事把Chrome浏览器版本和影刀内置浏览器对齐版本差太多会白屏。安装后打开影刀客户端新建一个流程命名bilibili_data_collector后续所有操作在这个流程里完成。浏览器相关操作必须用影刀内置浏览器用系统Chrome元素定位经常失败——这个踩过坑的都知道。home.linyan.cloud 上有更多实战案例遇到安装问题先去查。元素定位四合一B站页面元素定位是整套流程的核心搞不好后面全废。CSS选择器定位B站视频标题用.video-title选择器直接抓播放量用.video-data-item弹幕数同组元素第二个子节点。ID定位评论区用idcomment-list锚定整个容器。XPath定位UP主页视频列表的每条卡片用//div[classsmall-item]//a[classtitle]比CSS更稳定。相似元素组这是重点——视频列表页30条视频是相似元素用捕获相似元素一次框选全部再循环遍历。踩坑B站改版频繁CSS类名经常变。每次改版后要重新校验元素校验不过的把不稳定属性去掉只留 xpath层级tag名。元素编辑里勾掉 class、style 这些动态属性校验成功率直接从40%拉到90%。变量与数据类型整个流程需要这些变量up_url字符串UP主主页地址video_list列表存所有视频卡片相似元素组video_title字符串当前循环项的标题video_play_count字符串播放量原始文本含万字video_danmaku字符串弹幕数video_comment_count整数评论数需类型转换video_favorite字符串收藏数month_data字典按月份聚合的数据{2024-01: {play: 0, danmaku: 0, comment: 0, favorite: 0}}output_excelExcel对象最终输出注意B站播放量显示是1.2万这种格式不能直接当数字用。用「字符串替换」把万去掉再乘10000遇到亿乘100000000。写一个数据处理子流程专门干这个后面复用。流程控制主流程逻辑打开浏览器 → 打开UP主页For循环遍历视频列表相似元素组每个视频获取标题/播放量/弹幕/收藏 → 点击进入视频详情页在详情页获取评论数 → 返回列表页判断是否翻页下一页按钮存在且不含disabled属性循环结束后按月聚合数据 → 写入Excel翻页逻辑踩坑B站列表页底部的下一页按钮class属性里有disabled时表示没有下一页。用If判断元素属性是否包含disabled包含就退出循环不包含就点击翻页。别用元素是否存在来判断——这按钮一直存在只是样式变了。无限循环条件退出比For次数循环更安全因为你不知道UP主到底有多少页视频。设一个最大循环次数上限比如50次防止死循环超出上限说明数据量异常手动排查。网页自动化打开网页用「打开网页」指令传入up_url。别用系统浏览器影刀内置浏览器才能做元素操作。懒加载是B站最大的坑。UP主页视频列表默认只加载前30条往下滚才会加载更多。解决方案在循环开始前先无限循环执行鼠标滚动到底部每次滚动后获取视频卡片数量和上一次对比——数量不变说明到底了退出滚动循环。滚动后加「延迟执行」2秒等加载完成不加延迟数据全是空的。评论区也有懒加载。进入视频详情页后评论只显示前20条点击查看更多评论加载下一批。但本项目只取评论总数视频下方直接显示不需要逐条采集评论内容省了一大段滚动逻辑。网页监听是进阶玩法按F12打开开发者模式Network标签筛选API请求找到api.bilibili.com/x/v2/reply这个接口评论数据全在JSON里。用「开始监听请求」→「获取网页监听结果」→「停止监听」三步直接拿JSON比元素抓取快10倍。不过新手先用元素抓取跑通监听后面再学。数据处理核心数据处理子流程字符串数字转换原始数据1.2万播放 → 字符串替换播放为空 → 1.2万 → 字符串替换万为空 → 1.2 → 转浮点数 → 1.2 → 乘10000 → 12000 → 转整数 → 12000遇到–或空值B站有些老视频数据缺失直接赋0别让空值参与计算。月份聚合视频发布时间从详情页抓格式是2024年01月15日。用「字符串截取」取前7位替换年为-“、去掉月”得到2024-01。把month_data字典的对应月份key做累加。列表去重同一个视频可能出现在不同分类下用标题播放量组合做唯一标识已采集的跳过。维护一个collected_set列表每次采集前判断标题是否已在列表中。鼠标键盘图像自动化鼠标滚动指令在懒加载场景必须用。「鼠标滚动」设方向为向下、次数3次、每次滚动距离800像素。别用键盘PageDown——滚动距离不精确B站动态加载触发不稳定。如果网页出现弹窗遮挡B站偶尔弹出登录提示或活动弹窗用「判断元素是否存在」检查弹窗元素存在就「鼠标点击」关闭按钮。弹窗处理放在循环开头每次翻页或进入详情页前先检查。图像识别备用方案当B站改版后元素全部校验失败临时用图像点击。截取下一页按钮的图像用「图像点击」指令操作。稳定性不如元素定位但改版过渡期能续命。进阶技能网页监听抓取API数据前面提过了。这里说具体操作打开B站视频详情页F12 → Network → 筛选XHR找到评论API的URL模式影刀中获取网页对象 → 开始监听请求传入URL模式→ 延迟3秒 → 获取监听结果 → 停止监听监听结果是字典取[body]键值字符串转JSON对象从JSON里直接取评论总数、热门评论等正则表达式在元素编辑中的应用B站视频时长显示12:30这种格式元素属性里匹配用正则\d{1,2}:\d{2}比固定文本更灵活。在元素编辑器里选正则匹配输入这个正则校验通过率更高。平台实战B站采集注意事项B站反爬不严但频率太快会触发验证码。每次翻页间加3-5秒延迟评论区数据量大时用监听模式元素抓取效率太低视频列表页最多显示999条超过的要用搜索API补充淘宝/拼多多类似场景商品列表也是相似元素翻页懒加载这套逻辑换个URL直接复用。差别在于淘宝反爬更严需要处理验证码——用图像识别判断是否出验证码弹窗出的话暂停流程等手动处理别暴力冲。快手数据采集也是同套路打开UP主页 → 滚动加载 → 相似元素遍历 → 翻页 → 写入Excel。快手页面懒加载更重滚动间隔要5秒以上。系统联动数据写入Excel后和飞书联动做告警飞书Webhook告警——当某个视频评论数超过1000爆款视频自动发飞书消息通知。影刀里用「HTTP请求」POST飞书Webhook地址body是JSON格式消息体。飞书机器人配置群设置 → 机器人 → 添加自定义机器人 → 拿到Webhook URL。钉钉同样支持Webhook配置方式几乎一样只是消息格式稍有不同。选飞书还是钉钉看你们公司用的哪个。工程化与规范流程命名规范主流程bilibili_up_collector子流程bili_number_parser数字转换、bili_month_aggregator月份聚合、bili_feishu_alert飞书告警。变量命名规范驼峰式前缀区分来源——web_是网页抓取的proc_是流程内部处理的out_是输出数据。错误处理每个「获取元素」指令设超时5秒超时后不报错跳过当前循环项继续下一个。「异常执行策略」选跳过并继续别选终止流程——一个元素校验失败就终止后面几百条数据全丢。日志规范关键节点加「打印日志」——进入详情页时打印当前视频标题翻页时打印页码写入Excel时打印行号。出问题时看日志定位不用从头调试。速查表与常见报错报错原因解决元素校验失败B站改版class变了去掉class/style属性只留xpathtagNoneType object变量未赋值就使用检查变量赋值顺序打印日志排查Can not convert Array to String循环项是列表不是字符串用列表索引取具体项如loop_item[0]网页白屏浏览器版本不匹配更新内置浏览器到最新版懒加载抓到空数据滚动后未等加载完成滚动后加延迟2-3秒翻页后元素全丢网页刷新相似元素失效For次数循环重新获取相似元素列表Excel对象为None未启动Excel或未获取激活对象流程开头加「启动Excel」验证码弹出采集频率太快翻页间隔加3-5秒延迟循环死循环退出条件判断有bug加最大循环次数上限50UTF-8编码乱码网页数据含特殊字符字符串替换清洗或指定编码写入核心指令速查打开网页 / 获取网页对象 / 关闭网页捕获相似元素 / 循环相似元素 / 获取相似元素列表获取元素属性 / 获取元素文本 / 获取元素对象鼠标滚动 / 鼠标点击 / 延迟执行判断元素是否存在 / If条件判断 / 退出循环字符串替换 / 字符串截取 / 转整数 / 转浮点数启动Excel / 写入Excel行 / 获取当前激活Excel / 保存ExcelHTTP请求 / 开始监听请求 / 获取监听结果 / 停止监听内容标签影刀RPA / B站数据采集 / 网页自动化 / 懒加载处理 / 相似元素 / Excel写入 / 飞书告警 / 元素定位 / 数据处理 / 流程控制作者林焱
返回列表