实现自动化数据抓取:使用Node.js操控鼠标点击与位置坐标

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,1000CU*H 3个月
简介: 本文介绍了如何使用Node.js和Puppeteer实现自动化数据抓取,特别是针对新闻网站“澎湃新闻”。通过设置代理IP、User-Agent和Cookie,提高爬虫的效率和隐蔽性,避免被网站封锁。代码示例展示了如何模拟鼠标点击、键盘输入等操作,抓取并整理新闻数据,适用于需要规避IP限制和突破频率限制的场景。

爬虫代理.jpg

在当今信息爆炸的时代,自动化数据抓取技术(也称为“网络爬虫”)对于数据分析与信息挖掘具有重要的作用。本文将介绍如何利用Node.js实现自动化数据抓取,并通过控制鼠标点击与位置坐标的方式,采集页面上指定的新闻数据。我们将使用代理IP、设置User-Agent与Cookie等手段,以提高爬虫的效率与隐蔽性。特别适用于需要规避IP限制、突破频率限制的新闻热点数据抓取。

一、概述

Node.js作为一种高效的JavaScript运行时环境,提供了丰富的包与API,适合处理爬虫任务。我们将结合puppeteer与代理IP技术实现一个简单的自动化数据抓取工具。目标网站为“澎湃新闻”(https://www.thepaper.cn),我们将自动打开网页,模拟鼠标点击以采集页面信息,并将新闻内容按分类进行整理。

涉及的技术要点

  • Puppeteer:控制浏览器行为,模拟鼠标点击、键盘输入等操作。
  • 代理IP:通过代理IP减少被网站封锁的风险,这里我们将使用16yun的代理服务。
  • User-Agent与Cookie:通过设置请求头,模仿正常用户行为,提高抓取的效率与隐蔽性。

二、实现细节

1. 安装依赖

首先,确保系统已安装Node.js,然后通过npm安装相关包:

npm install puppeteer axios

2. 代码实现

以下代码实现了从澎湃新闻首页抓取新闻热点并归类整理的流程。代码中加入了代理IP、User-Agent和Cookie的配置。

const puppeteer = require('puppeteer');

// 代理IP配置 亿牛云爬虫代理 www.16yun.cn
const proxyHost = '代理服务器域名'; 
const proxyPort = '代理服务器端口'; 
const proxyUsername = '代理用户名'; 
const proxyPassword = '代理密码'; 

// User-Agent和Cookie配置
const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36';
const cookies = [
    {
   
        name: 'cookie_name',  // 根据需要替换
        value: 'cookie_value',
        domain: '.thepaper.cn'
    }
];

// 目标网站
const targetUrl = 'https://www.thepaper.cn';

(async () => {
   
    // 启动浏览器并设置代理
    const browser = await puppeteer.launch({
   
        headless: false,  // 显示浏览器窗口便于调试
        args: [
            `--proxy-server=http://${
     proxyHost}:${
     proxyPort}`
        ]
    });

    const page = await browser.newPage();

    // 设置User-Agent
    await page.setUserAgent(userAgent);

    // 设置Cookie
    await page.setCookie(...cookies);

    // 输入代理认证信息
    await page.authenticate({
    username: proxyUsername, password: proxyPassword });

    // 访问目标页面
    await page.goto(targetUrl, {
    waitUntil: 'networkidle2' });

    // 等待页面加载完成
    await page.waitForSelector('.news_content');  // 假设新闻内容在此CSS选择器中

    // 模拟鼠标点击某个分类标签(例如“热点”)
    const categorySelector = '.some-category-selector'; // 替换为实际的分类按钮选择器
    if (await page.$(categorySelector) !== null) {
   
        await page.click(categorySelector);
        console.log('点击了新闻分类标签');
        await page.waitForTimeout(2000);  // 等待页面加载新内容
    }

    // 选择并点击一个新闻标题,模拟进入新闻详情页面
    const newsTitleSelector = '.news_content .news_title';  // 假设新闻标题在此选择器中
    const newsTitle = await page.$(newsTitleSelector);
    if (newsTitle !== null) {
   
        const boundingBox = await newsTitle.boundingBox();  // 获取元素的位置信息
        await page.mouse.move(boundingBox.x + boundingBox.width / 2, boundingBox.y + boundingBox.height / 2);  // 移动鼠标到新闻标题
        await page.mouse.click(boundingBox.x + boundingBox.width / 2, boundingBox.y + boundingBox.height / 2);  // 模拟点击
        console.log('点击了新闻标题,进入新闻详情页面');
        await page.waitForTimeout(2000);  // 等待详情页面加载
    }

    // 抓取新闻详情页面中的内容
    const newsData = await page.evaluate(() => {
   
        const titleElement = document.querySelector('.news_content .news_title');  // 替换为详情页面中的标题选择器
        const contentElement = document.querySelector('.news_content .news_body');  // 替换为详情页面中的正文选择器
        return {
   
            title: titleElement ? titleElement.innerText : '',
            content: contentElement ? contentElement.innerText : ''
        };
    });

    console.log('抓取的新闻详情数据:', newsData);

    // 关闭浏览器
    await browser.close();
})();

3. 代码解析

  • 代理IP配置:使用16yun的代理IP服务(域名、端口、用户名、密码),通过page.authenticate()方法设置认证信息,保证访问来自代理IP。
  • 鼠标点击操作:使用 <font style="color:rgb(0, 0, 0);">page.click()</font> 或者通过 <font style="color:rgb(0, 0, 0);">page.mouse.move()</font> <font style="color:rgb(0, 0, 0);">page.mouse.click()</font> 精确模拟鼠标移动并点击。
  • 控制鼠标移动位置:通过获取元素的边界信息 (<font style="color:rgb(0, 0, 0);">boundingBox</font>) 精确定位鼠标点击位置,模仿真实用户的点击行为。
  • 等待页面响应:在点击后使用 <font style="color:rgb(0, 0, 0);">waitForTimeout</font> 短暂等待,确保页面内容加载完成,以便下一步抓取。

三、效果与应用

通过此方案,我们可以在澎湃新闻等新闻门户网站上自动化获取热点新闻数据,并进行归类整理,为后续的数据分析和热点追踪奠定基础。对于新闻热点的时效性需求,这种基于代理IP与用户模拟的爬虫方案能够有效提升数据抓取的稳定性与准确性。

在实际应用中,可以进一步将抓取的数据存储至数据库中,以便后续的数据分析与展示。此外,设置抓取频率与周期性更新机制,也可以对新闻热点的变化趋势进行长时间监控。

四、总结

本文通过Node.js、Puppeteer及代理IP等技术实现了自动化新闻数据抓取的流程。该方案适用于高频率、连续性的数据抓取任务。

相关文章
|
4月前
|
机器学习/深度学习 Kubernetes 监控
Kubernetes 节点故障自愈方案:结合 Node Problem Detector 与自动化脚本
本文深入探讨了Kubernetes节点故障自愈方案,结合Node Problem Detector(NPD)与自动化脚本,提供技术细节、完整代码示例及实战验证。文章分析了硬件、系统和内核层面的典型故障场景,指出现有监控体系的局限性,并提出基于NPD的实时事件捕获与自动化诊断树的改进方案。通过深度集成NPD、设计自动化修复引擎以及展示内核死锁恢复的实战案例,文章详细说明了自愈流程的实现步骤与性能优势。此外,还提供了生产环境部署指南、高可用架构设计及安全防护措施,并展望了机器学习增强故障预测和混沌工程验证的进阶优化方向。全文约1.2万字,适合希望提升Kubernetes集群稳定性的技术人员阅读。
166 1
|
10月前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
2549 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
数据采集 Web App开发 测试技术
使用Selenium与WebDriver实现跨浏览器自动化数据抓取
在网络爬虫领域,Selenium与WebDriver是实现跨浏览器自动化数据抓取的利器。本文详细介绍了如何利用Selenium和WebDriver结合代理IP技术提升数据抓取的稳定性和效率。通过设置user-agent和cookie来模拟真实用户行为,避免被网站检测和阻止。文章提供了具体的代码示例,展示了如何配置代理IP、设置user-agent和cookie,并实现了跨浏览器的数据抓取。合理的参数配置能有效减少爬虫被封禁的风险,提高数据抓取效率。
1174 6
使用Selenium与WebDriver实现跨浏览器自动化数据抓取
|
12月前
|
数据采集 存储 数据处理
从网络请求到Excel:自动化数据抓取和保存的完整指南
本文介绍了如何使用Python自动化采集东方财富股吧的发帖信息,并将其保存到Excel中。通过代理IP、多线程和网页解析技术,规避反爬虫机制,高效抓取帖子标题和发帖时间,帮助投资者获取市场情绪和热点数据。
302 0
|
JavaScript 前端开发
JS判断点击是单击还是双击
如何使用JavaScript判断用户点击是单击还是双击。
154 0
|
JavaScript 前端开发
Next js:点击登录显示登录表单,点击注册显示注册表单的功能
本文提供了一个Next.js中使用React状态管理实现点击按钮切换显示登录和注册表单的功能示例,包括创建`authform.tsx`组件和在页面组件中引入使用的方法。
|
3月前
|
JavaScript Unix Linux
nvm与node.js的安装指南
通过以上步骤,你可以在各种操作系统上成功安装NVM和Node.js,从而在不同的项目中灵活切换Node.js版本。这种灵活性对于管理不同项目的环境依赖而言是非常重要的。
849 11
|
8月前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。
|
7月前
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
6187 24