ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

影刀RPA新手教程:微博数据采集实战——话题热门内容与用户主页数据抓取

影刀RPA新手教程:微博数据采集实战——话题热门内容与用户主页数据抓取 影刀RPA新手教程微博数据采集实战——话题热门内容与用户主页数据抓取微博采集为什么比淘宝还难搞我第一次做微博采集的时候天真地以为跟淘宝一样打开网页就能抓。结果流程跑了两分钟就崩了——微博不登录看不到完整内容动态加载让你永远抓不全反爬检测比电商还激进。排查了一下午才搞明白微博是RPA采集里最考验基本功的平台之一登录态、动态渲染、滚动加载、反爬检测四个坑同时存在。这次我们做的案例监控竞品微博账号每日发文内容互动数据写入Excel做竞品分析。整条流程从微博话题页出发采集热门微博列表用户名/微博内容/转发/评论/点赞然后进入用户主页采集粉丝数/关注数/历史微博。安装与准备——先把工具跑起来影刀社区版下载安装官网直接拿就行社区版够用安装Chrome浏览器——微博采集别用影刀自带浏览器Chrome的Cookie管理更稳定影刀里配置Chrome打开影刀→设置→浏览器→选择Chrome确保影刀能接管Chrome手动登录一次微博用Chrome正常登录weibo.com登录后不要关闭浏览器Cookie就保住了home.linyan.cloud 上有一份微博采集的完整流程模板可以直接下载改参数跑省得从零搭建关键点微博必须先手动登录。影刀的设置Cookie指令可以注入Cookie但微博的登录Cookie涉及多个domain.weibo.com、.sina.com.cn手动登录一次比逐条设置Cookie靠谱得多。元素定位——微博的DOM结构比你想的复杂微博话题页的热门微博列表每条微博是一个card结构。F12打开开发者工具选中一条微博内容区域你会看到类似这样的结构XPath写法最稳定的选择//div[classWB_cardwrap S_bg2]//div[classWB_text W_f14]这是微博内容文本的XPath。注意微博的class名经常带空格比如WB_text W_f14XPath的contains写法更稳妥//div[contains(class,WB_text)]用户名元素//a[contains(class,W_f14) and nick-name]微博用nick-name属性存用户昵称比直接取文本更稳定——文本可能有表情符号干扰。转发/评论/点赞数//span[contains(class,WB_row_line)]/a/em[2]em[2]取的是数字em[1]是图标。微博的互动数据嵌套在a标签里的em标签第一次定位的时候我花了半小时才找到这个结构。CSS选择器并列写法备用方案div.WB_text → 微博内容 a[nick-name] → 用户昵称 em:nth-of-type(2) → 互动数字正则提取——配合元素定位做数据清洗微博内容里经常夹带HTML标签某某、表情图片标签用正则清洗pattern: [^] replacement: 空字符串这个正则把所有HTML标签去掉只留纯文本。影刀的替换文本指令正则模式填上面两个值就行。变量与数据类型——微博数据结构怎么组织微博一条数据包含用户名、微博内容、转发数、评论数、点赞数、发布时间。用字典存储单条数据最方便weibo_data{username:竞品账号A,content:今天发布的新产品...,retweet:23,comment:15,like:102,time:2025-06-30 10:30}所有微博数据用列表收集all_weibo_list [] # 空列表 循环中all_weibo_list.append(weibo_data)用户主页数据单独一个字典user_profile{fans:52300,follows:186,weibo_count:1240}注意数据类型转换微博的转发/评论/点赞数从网页抓下来是字符串“23”、“1.5万”需要转数字。1.5万这种中文数字单位用Python处理num_str1.5万if万innum_str:real_numfloat(num_str.replace(万,))*10000elif亿innum_str:real_numfloat(num_str.replace(亿,))*100000000else:real_numint(num_str)影刀里用执行Python代码指令把上面逻辑封装成函数每次抓到数字字符串就调用转换。流程控制——滚动加载的循环策略微博话题页不是翻页是滚动加载。往下滚新内容才出来。这跟淘宝翻页完全不同循环策略也要变。核心逻辑无限循环开始滚动网页到底部影刀鼠标滚动网页指令滚动方式选滚到底部等待2秒微博动态渲染需要时间影刀等待指令时间2秒获取当前可见的所有微博card元素循环相似元素对每条微博获取用户名/内容/转发/评论/点赞用微博ID或内容哈希做去重判断——如果已经在记录列表里跳过新数据追加到all_weibo_list判断是否到底滚动前后元素数量不变 → 退出循环去重是这个循环的关键。微博滚动加载时前面的元素可能从DOM里消失跟聚水潭的懒加载一样所以不能用数元素个数判断是否到底。正确做法recorded_ids [] # 记录已抓取的微博ID 上一轮长度 len(recorded_ids) 滚动等待 抓取当前可见微博 对比如果 len(recorded_ids) 上一轮长度 → 没有新数据 → 到底了 → 退出不确定总页数的情况下这是最可靠的退出策略。网页自动化——Cookie维持与等待策略微博采集最大的坑是登录态丢失。跑着跑着突然跳登录页数据就断了。解决方案流程开始前用获取筛选所有Cookie指令检查微博的登录Cookie是否存在name: SUBdomain: .weibo.com如果Cookie存在 → 继续采集如果Cookie不存在 → 打开微博登录页 → 手动登录或用设置Cookie注入之前保存的Cookie流程中每隔50条微博重新检查一次Cookie状态Cookie注入方法获取筛选所有Cookie → 筛选domain:.weibo.com → 保存到cookie_list变量 检查cookie_list中是否有SUB字段 没有 → 读取之前保存的Cookie文件 → 设置Cookie指令逐条注入等待策略——微博三种等待都要用元素等待等待特定元素出现比如WB_text元素设置超时10秒。微博内容在JS执行后才渲染不等就抓到空字符串网页等待等待网页加载完成。每次滚动后等待网页状态变成complete固定等待滚动后等2秒这是经验值。微博的动态渲染有延迟纯靠元素等待偶尔不够微博的弹窗处理——偶尔弹出登录提示/活动推广无限循环里加判断如果出现登录弹窗 → 关闭弹窗 → 检查Cookie 如果出现推广弹窗 → 点击关闭按钮XPath: //a[contains(class,close)]数据处理——清洗入库微博数据抓下来是脏的必须清洗微博内容去HTML标签正则[^]去表情符号微博表情是[表情名]格式正则[[^]]]数字转标准格式“1.5万” → 15000时间格式统一微博时间有3分钟前、“今天10:30”、06月30日三种格式时间解析用Pythonfromdatetimeimportdatetime,timedeltadefparse_weibo_time(time_str):if分钟前intime_str:minutesint(time_str.replace(分钟前,))returndatetime.now()-timedelta(minutesminutes)elif今天intime_str:todaydatetime.now().strftime(%Y-%m-%d)hourtime_str.replace(今天,)returnf{today}{hour}else:returntime_str# 06月30日 10:30格式影刀执行Python代码指令里写这个函数返回值赋给变量。写入Excel影刀指令写入Excel 文件路径C:\竞品分析\微博数据_20250630.xlsx 写入方式追加写入 数据范围从A1开始 列映射用户名→A列内容→B列转发→C列评论→D列点赞→E列时间→F列鼠标键盘图像自动化——模拟真人降低反爬微博的反爬检测很激进操作太快、轨迹太机械、页面停留时间太短都可能触发验证码。影刀开启模拟真人操作指令仿真移动鼠标——随机路线和速度移动仿真点击元素——在随机位置点击不是精确点中心仿真操作停顿——每次操作间随机停顿0.5-2秒这三项全开。微博采集流程里从打开网页到写入Excel的整段操作包在模拟真人区间内。额外措施滚动速度放慢不要一次滚到底分3-4次滚每次滚300像素每抓20条微博随机停顿5-15秒浏览器不要开无头模式——微博会检测进阶技能——HTTP/Python/OCR组合方案微博有些数据网页里拿不到需要进阶手段HTTP请求方案——拿微博API数据微博话题页的某些数据比如热门排序权重在XHR请求里。F12→Network→XHR找到请求URL用影刀发送HTTP请求指令直接拉数据比网页解析更稳定。但注意微博API也有鉴权需要在HTTP请求头里带上Cookie。影刀的HTTP请求指令支持自定义HeaderHeader: Cookie 之前获取的SUB值OCR方案——验证码识别微博触发验证码时图形验证码影刀OCR指令截图识别截图验证码区域 → OCR文字识别 → 识别结果填入输入框 → 点击确认微博的验证码不算复杂影刀自带的OCR基本能识别。如果识别率不够可以用第三方OCR API。Python协同——批量处理数据量大的时候用Python做后处理比影刀原生指令快得多importpandasaspd dfpd.read_excel(微博数据.xlsx)# 每日互动数据汇总daily_statsdf.groupby(username).agg({retweet:sum,comment:sum,like:sum})daily_stats.to_excel(每日竞品汇总.xlsx)平台实战——微博微信双平台数据流转微博采集的数据不能只存Excel要流转到其他平台做进一步分析。微博→微信通知每天采集完成后用影刀发送企业微信消息指令把当日竞品数据摘要推到群里消息内容{日期} 竞品微博监控{账号名}发文{数量}条总互动{总数}次详见Excel微博→飞书多维表格数据同步到飞书多维表格团队协作更方便影刀指令飞书多维表格→新增记录 逐条写入微博数据到飞书表格系统联动——文件/数据库/定时任务文件联动采集数据 → 写入Excel → Python脚本做汇总 → 生成HTML报告 → 发邮件数据库联动可选如果数据量大每天几百条累积几个月接入MySQL影刀指令执行SQL语句 INSERT INTO weibo_data (username, content, retweet, comment, like_count, time) VALUES (竞品账号A, 内容..., 23, 15, 102, 2025-06-30 10:30)定时任务影刀定时任务配置触发时间每天08:00 流程微博采集流程早上8点自动跑跑完微信推送结果上班就能看到昨天的竞品数据。工程化与规范——让流程跑得稳子流程封装微博登录→独立子流程Cookie检查→独立子流程数据采集→独立子流程数据写入→独立子流程。主流程只做调度异常处理每一步都加try-catch影刀的异常处理指令Cookie丢失→重新登录验证码出现→OCR识别重试网络超时→等待重试3次后跳过日志记录关键步骤打日志影刀打印日志指令记录当前进度、抓取条数、异常信息进度管理每抓50条微博保存一次Excel不是最后才存防止中途崩了数据全丢断点续跑记录上次抓取的最后一条微博ID下次从断点开始而不是从头速查表与常见报错微博采集高频报错“未找到指定元素”→ 微博内容还没加载出来。解决增加等待时间用等待元素出现指令等待WB_text元素“Cookie不存在”→ 登录态丢失。解决流程开头检查Cookie丢失时重新登录或注入保存的Cookie“获取文本为空”→ 元素定位到了但内容没渲染。解决加2秒固定等待微博JS渲染有延迟“网页已跳转”→ 触发了微博反爬验证码页面。解决OCR识别验证码或模拟真人操作降低触发概率“相似元素数量异常”→ 滚动加载导致DOM变化。解决用记录列表去重策略不要靠元素数量判断元素定位速查数据项XPath备用CSS选择器微博内容//div[contains(class,“WB_text”)]div.WB_text用户昵称//a[nick-name]a[nick-name]转发数//a[contains(href,“repost”)]/ema[href*“repost”] em评论数//a[contains(href,“comment”)]/ema[href*“comment”] em点赞数//a[contains(href,“like”)]/ema[href*“like”] em粉丝数//a[contains(href,“fans”)]a[href*“fans”]操作速查操作影刀指令关键参数打开微博打开网页URL: https://weibo.com检查Cookie获取筛选所有Cookiedomain:.weibo.com, name:SUB注入Cookie设置Cookie逐条注入保存的Cookie数据滚动加载鼠标滚动网页滚动方式:滚到底部等待渲染等待时间:2秒等待元素等待元素出现元素:WB_text, 超时:10秒模拟真人开启模拟真人操作停顿0.5-2秒数据写入写入Excel追加写入微博采集就这些坑登录态、动态加载、反爬、滚动四个问题逐一解决流程就能稳定跑。记住核心原则Cookie提前检查、滚动后等2秒、模拟真人操作、去重循环策略。这四条做到微博采集基本不会翻车。#影刀RPA #新手教程 作者林焱
返回列表