Node.js Puppeteer爬虫的部署与自动化运行指南


Node.js Puppeteer爬虫的部署与自动化运行指南

本教程详细指导如何部署基于node.js和puppeteer的网络爬虫,并实现其自动化定时执行。文章区分了前端静态网站与后端node.js脚本的部署策略,重点介绍了在windows环境下使用任务计划程序(task scheduler)进行定时任务配置的方法,同时提及了cors问题产生的原因及解决方案,并提供了其他部署选项,确保爬虫数据能定期更新并服务于前端应用。

理解Node.js爬虫与前端应用的差异

在开始部署之前,首先需要明确您所构建的系统包含两个主要部分:

  1. Node.js网络爬虫(index.js):这是一个运行在Node.js运行时环境中的服务器端脚本。它使用Puppeteer库来模拟浏览器行为,访问特定网页抓取数据,并将数据保存为JSON文件。这类脚本不能直接在浏览器中运行,因为它依赖于Node.js特有的模块(如fs用于文件系统操作)和外部库(如puppeteer)。
  2. 前端静态网站(HTML/CSS/JS):这是一个传统的静态网页应用,它在用户的浏览器中运行。您的HTML页面中的J*aScript会读取由爬虫生成的JSON文件,进行数据处理和展示。

由于这两部分运行环境不同,它们的部署策略也需要分开考虑。

Node.js爬虫脚本分析

您提供的index.js代码片段展示了使用Puppeteer抓取三个不同网站数据的过程,并将结果分别保存到arreglo2.json、arreglo.json和cotacaoFechamento.json文件中。

const puppeteer = require('puppeteer');
const fs = require('fs');

// 抓取第一个数据源
(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://br.advfn.com/investimentos/futuros/di-depositos-interfinanceiros/cotacoes', {
    waitUntil: 'load',
    timeout: 0
  });
  const textNode = await page.evaluate(() => {
    const nodeText = document.querySelector(".even.first").innerText;
    return [nodeText];
  });
  fs.writeFile('arreglo2.json', JSON.stringify(textNode), err => {
    if (err) throw new Error('algo deu errado');
    console.log('deu certo');
  });
  await browser.close(); // 确保关闭浏览器实例
})();

// 抓取第二个数据源
(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://br.tradingview.com/symbols/TVC-DXY/', {
    waitUntil: 'load',
    timeout: 0
  });
  const textNode = await page.evaluate(() => {
    const nodeText = document.querySelector(".js-quote-ticker.tv-site-table__row.tv-widget-watch-list__row:nth-child(2)").children[1].children[1].children[0].innerHTML;
    return [nodeText];
  });
  fs.writeFile('arreglo.json', JSON.stringify(textNode), err => {
    if (err) throw new Error('algo deu errado');
    console.log('deu certo');
  });
  await browser.close(); // 确保关闭浏览器实例
})();

// 抓取第三个数据源
(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://br.advfn.com/bolsa-de-valores/fx/USDBRL/cotacao', {
    waitUntil: 'load',
    timeout: 0
  });
  const textNode = await page.evaluate(() => {
    const nodeText = document.querySelector(".qs-current-price").innerText;
    return [nodeText];
  });
  fs.writeFile('cotacaoFechamento.json', JSON.stringify(textNode), err => {
    if (err) throw new Error('algo deu errado');
    console.log('deu certo');
  });
  await browser.close(); // 确保关闭浏览器实例
})();

注意事项:

  • 浏览器实例管理: 在每个异步函数结束时,务必调用 await browser.close(); 来关闭Puppeteer启动的浏览器实例,以避免资源泄露。上述代码已在示例中补充。
  • 错误处理: 确保文件写入等操作有健壮的错误处理机制。
  • 路径: fs.writeFile 默认会将文件写入到执行脚本的当前工作目录。在部署时,需要确保脚本有写入该目录的权限。

自动化定时执行Node.js爬虫

为了实现每天早上8点自动运行index.js,我们需要利用操作系统的定时任务功能。

1. Windows系统:使用任务计划程序(Task Scheduler)

Windows任务计划程序是一个强大的工具,可以用来安排程序或脚本在特定时间自动运行。

配置步骤:

  1. 打开任务计划程序: 在Windows搜索栏中输入“任务计划程序”并打开。

  2. 创建基本任务: 在右侧“操作”面板中选择“创建基本任务...”。

  3. 任务名称和描述:

    • 名称: 为任务指定一个有意义的名称,例如“每日爬虫数据更新”。
    • 描述: 简要说明任务目的。
  4. 触发器:

    • 选择“每天”。
    • 设置开始日期和时间为第二天早上8:00 AM。
    • 确保“重复任务”设置为每天。
  5. 操作:

    • 选择“启动程序”。
    • 程序或脚本: 填写您的Node.js可执行文件的完整路径。通常是 C:\Program Files\nodejs\node.exe (如果Node.js安装在默认位置)。
    • 添加参数(可选): 填写您的index.js脚本文件名,例如 index.js。
    • 起始于(可选): 填写您的index.js脚本所在的目录的完整路径,例如 C:\Users\YourUser\YourProjectFolder。这是非常关键的一步,因为fs.writeFile会在这个目录下创建JSON文件,并且Node.js会在这个目录下查找index.js。

    示例配置:

    • 程序或脚本: C:\Program Files\nodejs\node.exe
    • 添加参数(可选): index.js
    • 起始于(可选): C:\path\to\your\project\ (请替换为您的实际项目路径)
  6. 完成: 检查配置摘要,然后点击“完成”。

    白瓜面试 白瓜面试

    白瓜面试 - AI面试助手,辅助笔试面试神器

    白瓜面试 162 查看详情 白瓜面试

现在,您的Node.js爬虫将在每天早上8点自动运行。

2. Linux/macOS系统:使用Cron Jobs

如果您在Linux或macOS服务器上部署,可以使用cron来调度任务。

  1. 打开Crontab编辑器: 在终端中输入 crontab -e。

  2. 添加任务行: 在文件末尾添加一行,指定执行时间和命令。

    0 8 * * * /usr/local/bin/node /path/to/your/project/index.js >> /path/to/your/project/cron.log 2>&1
    • 0 8 * * *: 表示每天的8点0分执行。
    • /usr/local/bin/node: Node.js可执行文件的完整路径(根据您的安装路径可能不同,可以通过 which node 命令查看)。
    • /path/to/your/project/index.js: 您的index.js脚本的完整路径。
    • >> /path/to/your/project/cron.log 2>&1: 将所有输出(包括错误)重定向到日志文件,便于调试。

部署前端静态网站

您的前端静态网站(HTML、CSS、处理JSON的J*aScript)可以像部署普通静态网站一样进行。

  1. 文件放置: 将所有静态文件(包括index.html、style.css、前端J*aScript文件以及由爬虫生成的arreglo.json、arreglo2.json、cotacaoFechamento.json等)放在同一个目录下。
  2. 选择托管服务:
    • 本地服务器: 如果您希望在本地访问,可以使用XAMPP、Nginx、Apache或简单的Node.js静态文件服务器。确保JSON文件与HTML文件在同一个可访问的目录下。
    • 云托管: 对于线上部署,可以使用GitHub Pages、Netlify、Vercel、Amazon S3等静态网站托管服务。

重要提示: 确保前端J*aScript能够通过相对路径正确访问到爬虫生成的JSON文件。这意味着爬虫生成的JSON文件需要与前端HTML文件部署在同一个Web服务器的可访问路径下。

理解CORS问题

您提到在本地直接打开file://协议的HTML文件时遇到CORS(跨域资源共享)错误。这是因为:

  • 浏览器安全策略: 现代浏览器出于安全考虑,会限制通过file://协议加载的页面访问本地文件系统中的其他资源,尤其是通过XMLHttpRequest或fetch等API。这被视为跨域请求,即使它们都在您的本地硬盘上。
  • Web服务器的作用: 当您通过XAMPP等Web服务器访问时(例如http://localhost/your_project/index.html),浏览器认为所有资源都来自同一个“源”(http://localhost),因此不会触发CORS限制。

解决方案:

由于您的Node.js爬虫是服务器端脚本,它直接通过fs.writeFile操作本地文件系统,不涉及浏览器中的HTTP请求,因此不会遇到CORS问题。前端应用通过Web服务器访问这些JSON文件时,如果HTML和JSON文件都来自同一个源,也不会有CORS问题。

总结与高级部署选项

通过以上步骤,您可以在Windows系统上实现Node.js爬虫的自动化运行,并通过Web服务器提供数据给前端静态网站。

高级部署选项:

  • 云函数(Serverless Functions): AWS Lambda、Google Cloud Functions、Azure Functions等服务允许您部署Node.js函数,并配置定时触发器(例如每天早上8点),无需管理服务器。这是更现代且通常更具成本效益的解决方案。
  • 虚拟私有服务器(VPS): 租用一台VPS(如AWS EC2、DigitalOcean Droplet),您可以在上面安装Node.js,并将爬虫部署上去。然后使用Linux的cron或Windows的Task Scheduler来定时执行。
  • 容器化(Docker): 将您的Node.js爬虫打包成Docker容器,可以在任何支持Docker的环境中运行,并配合容器编排工具(如Kubernetes)进行调度。

选择哪种部署方式取决于您的需求、预算以及对服务器管理的熟悉程度。对于个人项目,Windows任务计划程序或Linux Cron是最直接且免费的解决方案。

以上就是Node.js Puppeteer爬虫的部署与自动化运行指南的详细内容,更多请关注其它相关文章!


# linux  # nodejs  # javascript  # java  # html  # js  # css  # 自动运行  # 常州网站优化上哪里找  # 关闭浏览器  # 网站建设哪家公司便宜  # 义乌php网站建设制作  # seo发帖是真的吗  # 网站seo服务  # 提供网站就能优化阅读  # 西北定制网站建设管理  # 晋城推广seo优化  # 韩国关键词排名查询网站  # 黑帽seo培训 discuz  # 目录下  # 文件系统  # 早上  # 这是  # 可以使用  # 并将  # 可选  # 您的  # json  # git  # node.js  # 前端 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 申通快件单号查询平台 申通包裹物流动态跟踪  《健康大兴》注册方法介绍  抖音如何进行蓝V认证 抖音企业号申请所需资料与流程  鼠标没反应了怎么办 无线/有线鼠标失灵的解决方法【详解】  Animex动漫社正版在线入口 Animex动漫社动漫官方观看网  《火花chat》搜索好友方法  网站体验不好=浪费钱:如何提升-用户体验效果差  《360浏览器》自动保存账号密码设置方法  植物大战僵尸95版游戏版下载_植物大战僵尸95版游戏版安装指南  快手极速版在线体验区 快手极速版网页体验入口  漫蛙manwa2网页版书签同步链接_漫蛙manwa多设备登录入口  《procreate》绘制渐变效果教程  抖音火山版注销账号抖音会注销吗 抖音火山版与抖音账号注销关系  《知到》打卡课程方法  《异星探险家》古怪的物品作用介绍  解决Go encoding/json 将JSON大数字解析为浮点数的问题  快手缓存清理方法  sublime如何撤销关闭的标签页_sublime重新打开已关闭文件技巧  Win11如何分屏操作_Win11多窗口分屏技巧  三角洲行动2025年9月10日摩斯密码分享  J*a中的值传递到底指什么_值传递模型在参数传递中的真正含义说明  PPT页面尺寸怎么修改 PPT自定义幻灯片大小与方向设置【教程】  J*aScript二进制处理_ArrayBuffer与Blob  c++如何掌握指针的核心用法_c++指针入门到精通指南  C++如何实现单例模式_C++线程安全的单例模式写法  包子漫画官网链接官方地址 包子漫画在线观看官网首页入口  空腹吃苹果好吗 苹果空腹摄入指南  圆通快递包裹轨迹查询 圆通速递快件实时位置跟踪  使用jQuery精确检测除指定元素外任意位置的点击事件  《微信》视频号原创声明开启方法  《金山词霸》语音翻译方法  C#解析来自网络的XML流数据 实时错误处理与重试机制  Golang如何实现HTTP请求重试机制_Golang HTTP请求错误处理策略  《合金装备4》有望推出重制版!制作人发话了  嘀嗒顺风车如何开具电子发票  漫蛙漫画官方网站使用_漫蛙manwa网页版在线入口教程  抖音号怎么解除企业认证改成个人?改成个人有影响吗?  如何配置VS Code作为您Git操作的默认编辑器  composer 提示 "requires ext-soap" 缺少 SOAP 扩展怎么办?  PHP页面重载时变量值不重置的实现方法  《狐友》联系客服方法  Retrofit根路径POST请求:@POST("/") 的应用与解析  睡觉时心跳快是什么原因 夜间心悸如何应对  C++ switch case字符串_C++如何实现字符串switch匹配  《海底捞》点外卖方法  Lar*el Eloquent中通过Join查询关联数据表:解决多行子查询问题  Final Cut Pro视频加EQ教程  在XML中嵌入二进制数据(如图片)的最佳实践是什么? Base64编码与解析注意事项  CSS如何使用outline-offset与颜色组合突出元素边框  使用TinyButStrong生成HTML并结合Dompdf创建PDF教程 

 2025-11-27

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.