
本教程详细指导如何部署基于node.js和puppeteer的网络爬虫,并实现其自动化定时执行。文章区分了前端静态网站与后端node.js脚本的部署策略,重点介绍了在windows环境下使用任务计划程序(task scheduler)进行定时任务配置的方法,同时提及了cors问题产生的原因及解决方案,并提供了其他部署选项,确保爬虫数据能定期更新并服务于前端应用。
在开始部署之前,首先需要明确您所构建的系统包含两个主要部分:
由于这两部分运行环境不同,它们的部署策略也需要分开考虑。
您提供的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(); // 确保关闭浏览器实例
})();注意事项:
为了实现每天早上8点自动运行index.js,我们需要利用操作系统的定时任务功能。
Windows任务计划程序是一个强大的工具,可以用来安排程序或脚本在特定时间自动运行。
配置步骤:
打开任务计划程序: 在Windows搜索栏中输入“任务计划程序”并打开。
创建基本任务: 在右侧“操作”面板中选择“创建基本任务...”。
任务名称和描述:
触发器:
操作:
示例配置:
完成: 检查配置摘要,然后点击“完成”。
现在,您的Node.js爬虫将在每天早上8点自动运行。
如果您在Linux或macOS服务器上部署,可以使用cron来调度任务。
打开Crontab编辑器: 在终端中输入 crontab -e。
添加任务行: 在文件末尾添加一行,指定执行时间和命令。
0 8 * * * /usr/local/bin/node /path/to/your/project/index.js >> /path/to/your/project/cron.log 2>&1
您的前端静态网站(HTML、CSS、处理JSON的JavaScript)可以像部署普通静态网站一样进行。
重要提示: 确保前端JavaScript能够通过相对路径正确访问到爬虫生成的JSON文件。这意味着爬虫生成的JSON文件需要与前端HTML文件部署在同一个Web服务器的可访问路径下。
您提到在本地直接打开file://协议的HTML文件时遇到CORS(跨域资源共享)错误。这是因为:
解决方案:
由于您的Node.js爬虫是服务器端脚本,它直接通过fs.writeFile操作本地文件系统,不涉及浏览器中的HTTP请求,因此不会遇到CORS问题。前端应用通过Web服务器访问这些JSON文件时,如果HTML和JSON文件都来自同一个源,也不会有CORS问题。
通过以上步骤,您可以在Windows系统上实现Node.js爬虫的自动化运行,并通过Web服务器提供数据给前端静态网站。
高级部署选项:
选择哪种部署方式取决于您的需求、预算以及对服务器管理的熟悉程度。对于个人项目,Windows任务计划程序或Linux Cron是最直接且免费的解决方案。
以上就是Node.js Puppeteer爬虫的部署与自动化运行指南的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号