
本文旨在指导开发者如何部署基于node.js的puppeteer网络爬虫,并实现其定时自动化运行。针对本地开发环境,文章详细介绍了利用windows任务计划程序配置定时任务的步骤,确保node.js脚本能按预设时间自动执行,更新数据。同时,文章也探讨了生产环境下的部署思路,强调了客户端与服务器端代码的区分,以及路径、依赖管理和错误日志的重要性。
在现代Web应用开发中,数据抓取(Web Scraping)是获取公开信息的重要手段。当涉及到需要定时自动执行的网络爬虫时,理解其运行环境和部署策略至关重要。本文将详细阐述如何部署一个基于Node.js和Puppeteer的爬虫,并配置其定时自动化运行,特别是针对初学者可能遇到的问题提供解决方案。
首先,我们需要明确一点:您所编写的index.js文件是一个Node.js脚本,它运行在Node.js运行时环境(即服务器端或本地机器),而非浏览器环境中。这与您通常上传的静态HTML、CSS和客户端JavaScript文件不同。
Node.js环境特性:
与浏览器JS的区别:
因此,要实现index.js脚本的定时运行,我们需要在一个持续运行的Node.js环境中,并利用操作系统的调度功能来触发它。
对于在Windows本地机器上运行的Node.js爬虫,最直接且有效的方法是使用Windows自带的“任务计划程序”(Task Scheduler)。这允许您在指定的时间自动执行任何程序或脚本。
在配置任务计划程序之前,请确保您的系统已满足以下条件:
以下是使用Windows任务计划程序定时执行Node.js脚本的详细步骤:
打开任务计划程序:
创建基本任务:
基本任务向导:
高级属性设置(可选但推荐):
完成以上步骤后,您的Node.js爬虫脚本将会在指定的时间自动执行。
您的index.js代码是一个典型的Node.js Puppeteer爬虫,它执行了三次独立的抓取操作,每次抓取后将数据保存到不同的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('保存arreglo2.json失败');
console.log('arreglo2.json保存成功');
});
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('保存arreglo.json失败');
console.log('arreglo.json保存成功');
});
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('保存cotacaoFechamento.json失败');
console.log('cotacaoFechamento.json保存成功');
});
await browser.close(); // 每次抓取后关闭浏览器实例
})();代码改进建议:
在部署和维护定时爬虫时,还需要考虑以下几点:
node "C:\Users\YourUser\Documents\my-scraper\index.js" >> "C:\Users\YourUser\Documents\my-scraper\log.txt" 2>&1
>>将标准输出追加到log.txt,2>&1将标准错误也重定向到标准输出。
将Node.js网络爬虫从本地开发环境部署到自动化运行,核心在于理解其服务器端运行的特性,并利用操作系统提供的调度工具。对于Windows用户,任务计划程序是一个简单而有效的解决方案。在部署过程中,务必关注路径、依赖、错误处理和日志记录等细节,以确保爬虫的稳定可靠运行。对于更高级的生产环境需求,可以考虑采用云服务、专用服务器或容器化等更专业的部署方案。通过这些方法,您可以实现爬虫的自动化运行,持续为您的Web应用提供所需数据。
以上就是Node.js爬虫的服务器端部署与定时任务配置指南的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号