[特殊字符]️ 安卓视频号像素级评论采集器 (WeChat Channels OCR Scraper)

1. 标题 (Title)

【V-Finder Pro】基于 7900X 算力驱动的视频号评论全量自动化采集引擎


2. 功能介绍 (Features)

  • 攻克自绘 UI:专门针对视频号评论区无法被系统 UI 树识别的问题,采用"像素眼"策略。

  • 高并发推理:利用 ONNXRuntime 优化,在 7900X 上实现极速图像文字解析。

  • 智能语义对齐:通过纵向像素间距算法,精准匹配"评论者"与"评论内容",解决 OCR 识别块散乱的问题。

  • 全自动流水线:集成"识别-去重-翻页-终止"全过程,支持从首条评论自动扫描至底部。


3. 提示词 (Prompt)

如果你需要让 AI 帮你优化逻辑,建议使用这段描述:

"开发环境为 Python 3.14,硬件核心 Ryzen 9 7900X。任务是开发视频号评论爬虫:要求使用 uiautomator2 进行截屏和 0.8 比例滑动;核心算法为 RapidOCR 结合 OpenCV 的 INTER_CUBIC 放大预处理;必须包含 MD5 指纹去重逻辑,确保在动态滑动的列表页中不出现重复记录;代码需具备强类型保护,防止 OCR 置信度返回空值导致的 Float 比较报错。"


4. 依赖库与安装指南 (Prerequisites & Installation)

由于你使用的是 Python 3.14 (目前处于非常前沿的版本),安装库时建议加上 --user 权限以避免系统权限冲突。

所需核心库:
  1. uiautomator2: 用于驱动安卓手机。

  2. rapidocr_onnxruntime: 核心 OCR 引擎(比 PaddleOCR 更轻量,适合 Windows 快速部署)。

  3. opencv-python: 用于图像预处理(放大、裁切)。

  4. pillow: 辅助图像处理。

安装指令:

请在你的终端(CMD 或 PowerShell)中依次执行:

复制代码
# 升级 pip 到最新版
python -m pip install --upgrade pip

# 安装手机驱动库
pip install uiautomator2 --upgrade --user

# 安装核心 OCR 引擎(ONNX版,完美适配你的 7900X)
pip install rapidocr_onnxruntime --upgrade --user

# 安装图像处理库
pip install opencv-python pillow --upgrade --user

5. 快速检查列表

在运行代码前,请确保:

  • 手机连接:手机已开启"开发者模式"和"USB 调试"。

  • ATX 服务 :运行 python -m uiautomator2 init(或者直接手机打开 ATX 应用点击启动)。

  • 视频号页面:手机已停留在视频号评论展开后的页面。


💡 完整版运行代码

python 复制代码
import uiautomator2 as u2
from rapidocr_onnxruntime import RapidOCR
import cv2
import time
import hashlib

d = u2.connect()
ocr_engine = RapidOCR()

def get_content_hash(user, content):
    """生成唯一哈希,修复了之前的 mdsl5 拼写错误"""
    unique_str = f"{user}_{content}"
    return hashlib.md5(unique_str.encode('utf-8')).hexdigest()

def scrape_all_comments():
    print(f"🚀 7900X 强化版引擎已就绪...")
    
    all_comments_list = []
    seen_comments_hashes = set()
    no_new_content_count = 0
    MAX_NO_NEW_CONTENT = 3 
    page_num = 1

    while True:
        print(f"\n📸 正在扫描第 {page_num} 页...")
        img = d.screenshot(format='opencv')
        if img is None: break
        h, w = img.shape[:2]
        
        img_resized = cv2.resize(img, (w*2, h*2), interpolation=cv2.INTER_CUBIC)
        results, _ = ocr_engine(img_resized)
        
        if not results:
            d.swipe_ext("up", scale=0.7)
            page_num += 1
            continue

        raw_data = []
        for line in results:
            try:
                # 核心修复:强制类型转换,防止 str/float 比较报错
                score = float(line[2]) if line[2] is not None else 0.0
                text = str(line[1]).strip()
                bbox = line[0]
                
                cx = int((bbox[0][0] + bbox[2][0]) / 4)
                cy = int((bbox[0][1] + bbox[2][1]) / 4)
                
                # 过滤非评论区(状态栏和底栏)
                if cy < h * 0.15 or cy > h * 0.9:
                    continue
                    
                raw_data.append({"x": cx, "y": cy, "text": text, "score": score})
            except (ValueError, TypeError, IndexError):
                continue # 忽略格式异常的行

        raw_data.sort(key=lambda k: k['y'])

        new_comments_in_this_page = 0
        i = 0
        while i < len(raw_data):
            item = raw_data[i]
            if i + 1 < len(raw_data):
                next_item = raw_data[i+1]
                # 纵向距离判断,适应高分屏
                if next_item['y'] - item['y'] < 100:
                    user = item['text']
                    content = next_item['text']
                    
                    comment_hash = get_content_hash(user, content)
                    if comment_hash not in seen_comments_hashes:
                        print(f"✅ [新] {user[:8]:<10} | {content[:25]}..")
                        seen_comments_hashes.add(comment_hash)
                        all_comments_list.append({"user": user, "content": content})
                        new_comments_in_this_page += 1
                    i += 2
                    continue
            i += 1

        if new_comments_in_this_page == 0:
            no_new_content_count += 1
            print(f"⚠️ 未发现新内容 ({no_new_content_count}/{MAX_NO_NEW_CONTENT})")
        else:
            no_new_content_count = 0 

        if no_new_content_count >= MAX_NO_NEW_CONTENT:
            print(f"🏁 已到达底部或内容不再更新。")
            break

        # 执行翻页
        d.swipe_ext("up", scale=0.8) 
        time.sleep(1.2) # 给 7900X 和网络一点缓冲时间
        page_num += 1

    return all_comments_list

if __name__ == "__main__":
    try:
        results = scrape_all_comments()
        print(f"\n🎉 采集结束,共抓取到 {len(results)} 条评论!")
    except KeyboardInterrupt:
        print("\n🛑 用户手动停止。")
相关推荐
明哥聊AI7 小时前
开源发布|ZhDocParser:不是 OCR,而是面向 RAG 与 Agent 的中文复杂文档结构化解析工具
开源·ocr
AI人工智能+1 天前
护照OCR识别技术,依托深度神经网络模型,实现了从像素到语义的端到端智能解析
深度学习·计算机视觉·自然语言处理·ocr·护照ocr识别
石榴树下的七彩鱼3 天前
出租车票/行程单OCR识别API实战:差旅报销自动化,毫秒提取行程信息(附Python/Java代码)
python·ocr·财务自动化·api接入·石榴智能·出租车票ocr·行程单ocr
医疗信息化王工4 天前
从零到一:基于 GGUF 格式部署 Unlimited-OCR 搭建企业级证件识别服务
图像处理·c#·ocr
Lyn_Li5 天前
扫描 PDF 歪了怎么办?用 6 种检测方法做本地批量扶正(附开源工具)
python·pdf·ocr·tesseract·开源工具·文档处理·本地处理·扫描件纠偏
余俊晖5 天前
多模态文档解析开源新进展:Unlimited OCR技术方案
人工智能·ocr·多模态
黑黑的独立开发笔记5 天前
「 简记往来」用户反馈驱动的产品迭代:简记往来的6次关键更新与一次“不做”的决策
ocr·用户运营·迭代加深·用户体验·产品决策·简记往来
weixin_408099676 天前
OCR批量识别图片方案:从手动处理到自动化API系统(Python/Java/PHP实战)
图像处理·python·ocr·文字识别·api调用·批量识别·石榴智能
stereohomology6 天前
测试unlimited ocr
ocr·colab
开开心心_Every6 天前
带OCR识别的电子发票打印工具
运维·自动化·ocr·电脑·powerpoint·音视频·lua