影刀RPA 实时监控网页变化并发送通知:比定时采集更高效
影刀RPA 实时监控网页变化并发送通知比定时采集更聪明作者林焱有些需求不需要采集完整数据只需要知道网页变了没——比如竞品价格调整、官网发布新公告、目标商品补货。用影刀做网页变化监控只在变化时通知你。方案哈希比对最简单的变化检测对比两次抓取的页面内容的哈希值。importrequestsimporthashlibdefget_page_hash(url):获取页面内容的SHA256哈希try:resprequests.get(url,headers{User-Agent:Mozilla/5.0...},timeout10)contentresp.textreturnhashlib.sha256(content.encode()).hexdigest()exceptExceptionase:returnNone# 影刀每30分钟调用一次urlhttps://example.com/product/123current_hashget_page_hash(url)# 读取上次的哈希importjson STATE_FILEpage_state.json[video(video-R67bruJO-1784059774051)(type-csdn)(url-https://live.csdn.net/v/embed/525010)(image-https://v-blog.csdnimg.cn/asset/f4faa587144cb7070f19e8b36813806b/cover/Cover0.jpg)(title-店群矩阵自动化突破运营极限)]try:withopen(STATE_FILE,r)asf:statejson.load(f)except:state{}prev_hashstate.get(url)ifprev_hashandcurrent_hash!prev_hash:send_notification(f⚠️ 页面已更新:{url})# 可以做进一步的处理截图、提取新内容等state[url]current_hashwithopen(STATE_FILE,w)asf:json.dump(state,f)指定区域监控不是整个页面的变化都要通知。如果只关心价格、库存等特定区域只对那部分内容做哈希frombs4importBeautifulSoupdefget_element_hash(url,selector):获取特定元素的哈希resprequests.get(url,headers{User-Agent:...})soupBeautifulSoup(resp.text,html.parser)elemsoup.select_one(selector)ifelem:returnhashlib.sha256(str(elem).encode()).hexdigest()returnNone# 只监控价格区域price_hashget_element_hash(https://item.jd.com/xxx.html,.price)增量变化检测哈希只能告诉你变了还是没变但不知道具体变了什么。如果要提取变化内容importdifflibdefget_diff(old_text,new_text):比较两段文本的差异diffdifflib.unified_diff(old_text.splitlines(),new_text.splitlines(),lineterm)return\n.join(diff)# 提取页面中的关键文本old_contentextract_key_text(old_response)new_contentextract_key_text(new_response)diffget_diff(old_content,new_content)ifdiff:send_notification(f页面变化\n{diff[:500]})# 截取前500字踩坑实录坑1动态广告和推荐内容导致误报很多页面有随机广告、个性化推荐。相同的页面每次打开都有不同的广告位哈希值永远在变。需要对无关区域剪掉后再做哈希——用BeautifulSoup删除广告/推荐区域的元素foradinsoup.select(.ad, .recommend, .random-content):ad.decompose()# 删除这些元素# 然后再计算哈希坑2时间戳和动态Token页面里藏着CSRF token、时间戳、session id等动态值每次请求都不同。用正则把这些动态值替换成固定标记temu店群自动化报活动案例importre contentre.sub(rcsrf_token[a-f0-9],csrf_tokenXXXX,content)contentre.sub(r\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},TIMESTAMP,content)坑3监控频率控制如果你每1分钟监控一次可能因为CDN缓存等原因连续触发误报。建议设置确认窗口连续两次检测到变化才通知防止波动。change_count1ifchange_count2:# 连续2次都变化确认真变化send_notification(...)change_count0影刀完整方案影刀定时触发器每30分钟 ↓ Python代码块请求目标URL ↓ BeautifulSoup去除广告/动态内容 ↓ 计算元素哈希 → 与上次比较 ↓ 有变化 确认窗口连续2次→ 推送通知 截图保存 ↓ 无变化 记录日志 → 等待下次触发写在最后网页变化监控是比数据采集更聪明的使用方式——不需要24小时不停地采数据只在变化时看一眼。节省资源、降低被封风险、信息更精准。哈希对比是最简单可靠的变化检测方法99%的场景够用。