视觉爬虫开发:通过Puppeteer截图+CV定位动态元素坐标

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 本文是关于“视觉爬虫开发”的速查指南,重点介绍如何使用 Puppeteer 和 OpenCV 在小红书上实现视频截图与评论采集。内容包括代理 IP 接入、Cookie 与 User-Agent 设置、动态元素坐标获取及评论采集的代码示例。提供功能点列表、常用代码片段、配置建议和快速测试方式,帮助开发者快速掌握核心技术和实践方法。通过 Puppeteer 截图结合 OpenCV 模板匹配,精准定位动态元素坐标,提升爬虫稳定性与效率。

本文为「视觉爬虫开发:通过 Puppeteer 截图 + CV 定位动态元素坐标」的速查指南,帮助你快速掌握在小红书(https://www.xiaohongshu.com/)上使用 Puppeteer 结合 OpenCV 实现视频截图与评论采集的核心思路与代码示例。文章分为四大部分:功能点列表、常用代码片段、配置建议、快速测试方式,并集成爬虫代理设置,以便直接在项目中复用。

功能点列表

  1. 代理 IP 接入:使用爬虫代理的隧道模式,通过域名、端口、用户名、密码进行 HTTP/HTTPS 请求认证 (16yun.cn)。
  2. Cookie 与 User-Agent 设置:模拟真实浏览器会话,避免被反爬。
  3. Puppeteer 视频截图:定位视频元素并截取帧图,或全页截图后裁剪目标区域。
  4. 动态元素坐标获取:将 Puppeteer 截图结果导入 OpenCV,通过模板匹配定位元素坐标 。
  5. 评论采集:滚动法或点击“加载更多”获取评论列表,再通过 DOM 解析提取内容。

常用代码片段

1. 启动 Puppeteer 并接入爬虫代理

const puppeteer = require('puppeteer');

(async () => {
   
  // 启动无头浏览器,接入亿牛云爬虫代理 www.16yun.cn
  const browser = await puppeteer.launch({
   
    args: [
      '--no-sandbox',
      '--disable-setuid-sandbox',
      '--proxy-server=tcp://t.16yun.cn:31111'  // 代理域名:端口 :contentReference[oaicite:3]{index=3}
    ]
  });
  const page = await browser.newPage();

  // 设置代理认证(Tunnel 模式下 Puppeteer 自动支持用户名/密码)
  await page.authenticate({
   
    username: 'YOUR_PROXY_USER',  // 亿牛云用户名 :contentReference[oaicite:4]{index=4}
    password: 'YOUR_PROXY_PASS'   // 亿牛云密码 :contentReference[oaicite:5]{index=5}
  });

  // 设置 Cookie 与 User-Agent
  await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...');  // 模拟浏览器 UA
  await page.setCookie({
   
    name: 'sessionid',
    value: 'YOUR_SESSION_ID',
    domain: '.xiaohongshu.com'
  });

  // 跳转到小红书视频页
  await page.goto('https://www.xiaohongshu.com/', {
    waitUntil: 'networkidle2' });

  // 等待视频元素出现并截屏
  const videoHandle = await page.waitForSelector('video');  // 定位视频元素
  const boundingBox = await videoHandle.boundingBox();
  await page.screenshot({
   
    path: 'video_frame.png',
    clip: {
   
      x: boundingBox.x,
      y: boundingBox.y,
      width: boundingBox.width,
      height: boundingBox.height
    }
  });  // 截取视频区域 :contentReference[oaicite:6]{index=6}

  await browser.close();
})();

2. OpenCV 模板匹配定位坐标(Python)

import cv2
import numpy as np

# 加载 Puppeteer 截图
screenshot = cv2.imread("video_frame.png", 0)  # 灰度化
template = cv2.imread("button_template.png", 0)  # 预先截图的按钮模板

# 执行多尺度模板匹配 :contentReference[oaicite:7]{index=7}
res = cv2.matchTemplate(screenshot, template, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
top_left = max_loc
h, w = template.shape
bottom_right = (top_left[0] + w, top_left[1] + h)

# 可视化结果
cv2.rectangle(screenshot, top_left, bottom_right, 255, 2)
cv2.imwrite("matched.png", screenshot)
print(f"元素坐标:{top_left}")

3. 评论列表采集(Puppeteer)

// 在原 Puppeteer 脚本中继续:
const comments = await page.evaluate(() => {
   
  // 滚动并加载更多评论
  window.scrollBy(0, window.innerHeight);
  // 假设评论项选择器为 .comment-item
  return Array.from(document.querySelectorAll('.comment-item')).map(el => ({
   
    user: el.querySelector('.user-name')?.innerText.trim(),
    text: el.querySelector('.comment-text')?.innerText.trim()
  }));
});
console.log(comments);

配置建议

  • 代理模式:推荐使用 Tunnel 模式(隧道认证),在 HTTPS 场景下更稳定 (CSDN)。
  • IP 切换:业务需要多个会话时,可自定义 Proxy-Tunnel: 随机数 HTTP 头实现精确切换 (CSDN)。
  • 模板准备:针对目标动态元素,截图多种分辨率模板,并在代码中以阈值筛选最佳匹配 (OpenCV документация)。
  • 等待策略:结合 waitUntil: 'networkidle2'page.waitForSelector() 确保视频及评论加载完成。
  • 错误重试:对截图、模板匹配、请求失败等步骤添加重试逻辑,提高稳定性。

快速测试方式

  1. 环境准备
npm install puppeteer
pip install opencv-python-headless
  1. 代理连通性测试
curl -x http://YOUR_PROXY_USER:YOUR_PROXY_PASS@t.16yun.cn:31111 https://httpbin.org/ip
  1. Puppeteer 截图验证
node capture.js
# 检查生成的 video_frame.png 是否正确截取视频区域
  1. OpenCV 匹配验证
python template_match.py
# 检查 matched.png 是否在目标位置画出矩形框
  1. 评论采集验证
    在 capture.js 末尾打印 comments,确认输出的用户名与评论内容是否符合预期。

以上即为「视觉爬虫开发:通过 Puppeteer 截图 + CV 定位动态元素坐标」的速查指南,涵盖代理接入、Cookie/UA 设置、视频截图、元素定位与评论采集四大核心功能,助你快速上手并在小红书等动态站点实现可靠的视觉爬虫方案。

相关文章
|
6月前
|
数据采集 存储 缓存
PHP爬虫的使用与开发
本文深入探讨了PHP爬虫的使用与开发,涵盖基本原理、关键技术、开发实践及优化策略。从发送HTTP请求、解析HTML到数据存储,再到处理反爬机制,全面指导读者构建高效可靠的爬虫程序。
146 3
|
11月前
|
数据采集 存储 XML
高级网页爬虫开发:Scrapy和BeautifulSoup的深度整合
高级网页爬虫开发:Scrapy和BeautifulSoup的深度整合
|
7月前
|
数据采集 存储 JSON
Python爬虫开发中的分析与方案制定
Python爬虫开发中的分析与方案制定
|
9月前
|
数据采集 Java 数据挖掘
Java IO异常处理:在Web爬虫开发中的实践
Java IO异常处理:在Web爬虫开发中的实践
|
9月前
|
数据采集 存储 前端开发
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
|
10月前
|
数据采集 存储 前端开发
豆瓣评分9.0!Python3网络爬虫开发实战,堪称教学典范!
今天我们所处的时代是信息化时代,是数据驱动的人工智能时代。在人工智能、物联网时代,万物互联和物理世界的全面数字化使得人工智能可以基于这些数据产生优质的决策,从而对人类的生产生活产生巨大价值。 在这个以数据驱动为特征的时代,数据是最基础的。数据既可以通过研发产品获得,也可以通过爬虫采集公开数据获得,因此爬虫技术在这个快速发展的时代就显得尤为重要,高端爬虫人才的收人也在逐年提高。
|
10月前
|
数据采集 数据挖掘 数据处理
Python爬虫开发:爬取简单的网页数据
本文详细介绍了如何使用Python爬取简单的网页数据,以掘金为例,展示了从发送HTTP请求、解析HTML文档到提取和保存数据的完整过程。通过这个示例,你可以掌握基本的网页爬取技巧,为后续的数据分析打下基础。希望本文对你有所帮助。
|
10月前
|
数据采集 数据挖掘 数据处理
Python爬虫开发:爬取简单的网页数据
在数据分析中,数据的获取是第一步。随着互联网的普及,网络爬虫成为获取数据的重要手段。本文将详细介绍如何使用Python爬取简单的网页数据。
|
10月前
|
数据采集 存储 JSON
Python爬虫开发:BeautifulSoup、Scrapy入门
在现代网络开发中,网络爬虫是一个非常重要的工具。它可以自动化地从网页中提取数据,并且可以用于各种用途,如数据收集、信息聚合和内容监控等。在Python中,有多个库可以用于爬虫开发,其中BeautifulSoup和Scrapy是两个非常流行的选择。本篇文章将详细介绍这两个库,并提供一个综合详细的例子,展示如何使用它们来进行网页数据爬取。
|
10月前
|
数据采集 前端开发 算法
基于朴素贝叶斯算法的新闻类型预测,django框架开发,前端bootstrap,有爬虫有数据库
本文介绍了一个基于Django框架和朴素贝叶斯算法开发的新闻类型预测系统,该系统具备用户登录注册、后台管理、数据展示、新闻分类分布分析、新闻数量排名和新闻标题预测等功能,旨在提高新闻处理效率和个性化推荐服务。