使用Puppeteer进行数据抓取保存为JSON

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 使用Puppeteer进行数据抓取保存为JSON

Puppeteer简介
Puppeteer是由Google Chrome团队开发的一个Node库,它提供了一个高级API来控制Chrome或Chromium的无头版本。Puppeteer能够执行各种任务,包括页面导航、内容抓取、屏幕截图、PDF生成等。
主要特点
无头浏览器控制:无需打开浏览器界面即可执行任务。
跨平台:支持Windows、Linux和macOS。
API丰富:提供丰富的API来模拟用户行为。
使用Puppeteer进行数据抓取
基本流程
启动浏览器:使用Puppeteer启动无头浏览器。
打开页面:创建新的页面实例并导航到目标URL。
等待页面加载:确保页面完全加载。
抓取内容:使用Puppeteer提供的API获取页面内容。
记录日志:将抓取的内容或相关信息记录到日志文件。
关闭浏览器:任务完成后关闭浏览器。
实现过程
假设我们需要抓取一个网页上的表格数据,以下是实现的步骤:
```const puppeteer = require('puppeteer');
const http = require('http');

const proxyHost = "www.16yun.cn";
const proxyPort = "5445";
const proxyUser = "16QMSOML";
const proxyPass = "280651";

// 创建HTTP代理服务器
const proxy = http.createServer((req, res) => {
// 这里可以添加更多的逻辑,比如请求转发等
res.end('代理服务器正在运行');
}).listen(proxyPort, proxyHost);

proxy.on('connect', (req, res, proxy) => {
// 这里可以添加代理连接的逻辑
// 例如,根据HTTP CONNECT方法,建立到目标服务器的连接
});

(async () => {
// 设置Puppeteer的代理
const browser = await puppeteer.launch({
args: [
--proxy-server=http://${proxyUser}:${proxyPass}@${proxyHost}:${proxyPort}
]
});

const page = await browser.newPage();

try {
await page.goto('https://example.com/data');

// 等待表格加载完成
await page.waitForSelector('table');

// 获取表格数据
const tableData = await page.evaluate(() => {
  const table = document.querySelector('table');
  const rows = table.querySelectorAll('tr');
  const data = [];
  rows.forEach(row => {
    const columns = row.querySelectorAll('td');
    const rowData = [];
    columns.forEach(column => {
      rowData.push(column.textContent);
    });
    data.push(rowData);
  });
  return data;
});

console.log(tableData);

} catch (error) {
console.error('发生错误:', error);
} finally {
await browser.close();
}
})();



日志记录
在数据抓取的过程中,记录日志是非常重要的,可以帮助我们跟踪程序的执行情况和调试问题。可以使用winston或bunyan等日志库来实现日志记录:
以下是使用winston记录日志的示例:

```const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.File({ filename: 'combined.log' })
  ]
});

(async () => {
  try {
    const browser = await puppeteer.launch();
    logger.info('Browser launched');

    const page = await browser.newPage();
    logger.info('New page created');

    await page.goto('https://example.com/data');
    logger.info('Navigated to the data page');

    // ... 数据抓取代码 ...

    logger.info('Data scraping completed');
  } catch (error) {
    logger.error('Error occurred:', error);
  } finally {
    await browser.close();
    logger.info('Browser closed');
  }
})();

数据保存为JSON
抓取到的数据可以通过fs模块保存为JSON文件:

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

// ... 数据抓取代码 ...

// 将数据保存为JSON
fs.writeFile('data.json', JSON.stringify(tableData, null, 2), err => {
if (err) {
logger.error('Error writing file:', err);
} else {
logger.info('Data saved successfully');
}
});
```
结语
本文介绍了使用Puppeteer进行网页内容的抓取,并通过日志记录和JSON文件保存的方式,展示了整个数据抓取过程的实现。Puppeteer的强大功能和灵活性使其成为自动化网页测试和数据抓取的理想选择。

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
前端开发
前端如何支持PDF、Excel、Word在线预览 #42
前端如何支持PDF、Excel、Word在线预览 #42
948 0
|
8月前
|
人工智能 Java Go
java判断ExecutorService是否有任务
在Java中,ExecutorService用于管理线程池。本文介绍如何判断ExecutorService是否有任务正在执行或等待执行。通过创建固定大小的线程池、提交任务,并使用`awaitTermination()`方法结合超时时间,可以有效检测任务状态。此方法简单实用,适用于多种场景。文末附有代码示例及详细解读。
146 1
|
数据采集
使用 Puppeteer 绕过 Captcha:实现商家数据自动化采集
本文介绍了如何使用Puppeteer结合代理IP和用户伪装技术,轻松绕过大众点评的Captcha验证,实现商家信息的高效采集。通过配置Puppeteer、设置代理和用户伪装参数、模拟人类操作等步骤,成功提取了目标页面的数据。该方法不仅提高了爬虫的稳定性和隐蔽性,还为市场研究和商业分析提供了有力支持。注意,数据采集需遵守法律法规及网站政策。
452 1
使用 Puppeteer 绕过 Captcha:实现商家数据自动化采集
|
敏捷开发 数据可视化 项目管理
燃起图是什么? 敏捷项目管理中不可忽视的高效利器
在现代项目管理中,团队效率至关重要。燃起图(Burn Up Chart)作为一种直观的可视化工具,通过展示完成工作量和总工作量的变化,帮助团队实时跟踪进度、应对需求变更,提高透明度与沟通效率。本文介绍了燃起图的功能、优势及应用方法,并推荐了几款支持燃起图的项目管理工具。
580 13
|
数据采集 Web App开发 测试技术
如何避免反爬虫程序检测到爬虫行为?
这段内容介绍了几种避免被反爬虫程序检测的方法:通过调整请求频率并遵循网站规则来模拟自然访问;通过设置合理的User-Agent和其他请求头信息来伪装请求;利用代理IP和分布式架构来管理IP地址;以及采用Selenium等工具模拟人类的浏览行为,如随机点击和滚动页面,使爬虫行为更加逼真。这些技巧有助于降低被目标网站识别的风险。
|
XML JavaScript 前端开发
如何解析一个 HTML 文本
【10月更文挑战第23天】在实际应用中,根据具体的需求和场景,我们可以灵活选择解析方法,并结合其他相关技术来实现高效、准确的 HTML 解析。随着网页技术的不断发展,解析 HTML 文本的方法也在不断更新和完善,
|
11月前
|
人工智能 数据可视化 TensorFlow
《解锁DevEco Studio:开启鸿蒙AI模型可视化开发新征程》
在人工智能与鸿蒙系统深度融合的趋势下,DevEco Studio作为华为打造的一站式开发平台,为人工智能模型的可视化开发提供了强大支持。通过搭建基础环境、引入AI框架(如HiAI或TensorFlow Lite)、运用智能代码编辑和低代码开发工具,以及借助DeepSeek等AI辅助编程功能,开发者可高效构建多端一致的AI应用。从环境配置到模型训练与界面优化,DevEco Studio助力探索创新应用场景,推动鸿蒙生态蓬勃发展,为用户带来智能化新体验。
361 0
|
存储 SQL 安全
API 数据接口使用与安全指南
本文介绍了API数据接口的基础知识、使用流程及安全要点。首先,定义了API及其在现代技术生态中的重要性,接着详细阐述了API使用的六个步骤:明确需求、搜索筛选、注册获取密钥、解读文档、环境搭建与集成、数据处理与应用集成。最后,强调了API安全的重要性,包括身份验证、数据加密、防范攻击及安全监控等方面,确保API的安全稳定运行。
|
机器学习/深度学习 分布式计算 数据可视化
Python在数据科学中的应用与挑战
本文探讨了Python编程语言在数据科学领域的广泛应用及其面临的主要挑战。Python因其简洁的语法、强大的库支持和活跃的社区,已成为数据科学家的首选工具。然而,随着数据量的激增和复杂性的增加,Python也面临着性能瓶颈、内存管理等问题。本文将通过具体案例分析,展示Python在数据处理、分析和可视化方面的优势,同时讨论如何克服其在大规模数据处理中的局限性,为读者提供实用的解决方案和优化建议。
|
JavaScript
vue3的警告问题 [Vue warn]: inject() can only be used inside setup() or functional components. 怎么解决?
vue3的警告问题 [Vue warn]: inject() can only be used inside setup() or functional components. 怎么解决?
756 5