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

news/2024/8/26 23:35:15/ 标签: json, python, 爬虫, 信息可视化

Python_00044.png

Puppeteer简介

Puppeteer是由Google Chrome团队开发的一个Node库,它提供了一个高级API来控制Chrome或Chromium的无头版本。Puppeteer能够执行各种任务,包括页面导航、内容抓取、屏幕截图、PDF生成等。

主要特点

  • 无头浏览器控制:无需打开浏览器界面即可执行任务。
  • 跨平台:支持Windows、Linux和macOS。
  • API丰富:提供丰富的API来模拟用户行为。

使用Puppeteer进行数据抓取

基本流程

  1. 启动浏览器:使用Puppeteer启动无头浏览器。
  2. 打开页面:创建新的页面实例并导航到目标URL。
  3. 等待页面加载:确保页面完全加载。
  4. 抓取内容:使用Puppeteer提供的API获取页面内容。
  5. 记录日志:将抓取的内容或相关信息记录到日志文件。
  6. 关闭浏览器:任务完成后关闭浏览器。

实现过程

假设我们需要抓取一个网页上的表格数据,以下是实现的步骤:

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的强大功能和灵活性使其成为自动化网页测试和数据抓取的理想选择。


http://www.ppmy.cn/news/1475297.html

相关文章

《python程序语言设计》2018版第5章第55题利用turtle绘制平方函数,我用的是我之前的解题,有点扛不住了。兄弟们

直接上图 import turtleturtle.speed(20) turtle.penup() # 这里就是我理解的平方函数的概念,不知道对不对 for i in range(-18, 19):turtle.goto(i, i ** 2)turtle.pendown()turtle.hideturtle() turtle.done()只有平方函数的结果。没有横线竖线。各位兄弟们自己脑…

Redis6.2.1版本集群新加副本

测试数据 通过redis-benchmark生成测试数据 ./bin/redis-benchmark -h 172.31.4.18 -p 6381 -a Redis_6.2.1_Sc --cluster -t set -d 128 -n 10000000 -r 100000000 -c 200新加节点 172.31.4.18:6381> AUTH Redis_6.2.1_Sc OK172.31.4.18:6381> cluster meet 172.31.4…

激活交通运输创新活力 推进户外安全指数——北三车载终端TD3D:准确追踪 应急救援

根据交通运输部办公厅发布《关于充分发挥全国道路货运车辆公共监管与服务平台作用支撑行业高质量发展的意见》(下称《意见》)。《意见》提出,要持续拓展货运平台服务功能,加快推动北斗终端应用。 《意见》提出,加快单…

Perl文件锁机制:守护你的数据安全

🔒 Perl文件锁机制:守护你的数据安全 在多任务和多用户的系统环境中,文件锁是确保数据完整性和一致性的关键机制。Perl作为一种强大的脚本语言,提供了多种文件锁处理方式,以支持并发访问时的安全性。本文将深入探讨Pe…

【大模型LLM面试合集】大语言模型架构_attention

1.attention 1.Attention 1.1 讲讲对Attention的理解? Attention机制是一种在处理时序相关问题的时候常用的技术,主要用于处理序列数据。 核心思想是在处理序列数据时,网络应该更关注输入中的重要部分,而忽略不重要的部分&…

【Datawhale AI 夏令营】讯飞“基于术语词典干预的机器翻译挑战赛”

背景 机器翻译具有悠长的发展历史,目前主流的机器翻译方法为神经网络翻译,如LSTM和transformer。在特定领域或行业中,由于机器翻译难以保证术语的一致性,导致翻译效果还不够理想。对于术语名词、人名地名等机器翻译不准确的结果&…

大模型最新黑书:基于GPT-3、ChatGPT、GPT-4等Transformer架构的自然语言处理 PDF

今天给大家推荐一本丹尼斯罗斯曼(Denis Rothman)编写的关于大语言模型&#xff08;LLM&#xff09;权威教程<<大模型应用解决方案> 基于GPT-3、ChatGPT、GPT-4等Transformer架构的自然语言处理>&#xff01;Google工程总监Antonio Gulli作序&#xff0c;这含金量不…

1509.三次操作后最大值与最小值的最小差

1.题目描述 给你一个数组 nums 。 每次操作你可以选择 nums 中的任意一个元素并将它改成 任意值 。 在 执行最多三次移动后 &#xff0c;返回 nums 中最大值与最小值的最小差值。 示例 1&#xff1a; 输入&#xff1a;nums [5,3,2,4] 输出&#xff1a;0 解释&#xff1a;我们最…

2024年浙江省高考分数一分一段数据可视化

下图根据 2024 年浙江高考一分一段表绘制&#xff0c;可以看到&#xff0c;竞争最激烈的分数区间在620分到480分之间。 不过&#xff0c;浙江是考两次取最大&#xff0c;不是很有代表性。看看湖北的数据&#xff0c;580分到400分的区段都很卷。另外&#xff0c;从这个图也可以…

QT5.12.9 通过MinGW64 / MinGW32 cmake编译Opencv4.5.1

一、安装前准备: 1.安装QT,QT5.12.9官方下载链接:https://download.qt.io/archive/qt/5.12/5.12.9/ QT安装教程:https://blog.csdn.net/Mark_md/article/details/108614209 如果电脑是64位就编译器选择MinGW64,32位就选择MinGW32,我的是MinGW64。 2.opencv源码下载:h…

SchedulerLock分布式定时任务锁

1.pom中引入依赖&#xff0c;这里使用redis作为锁 <dependency><groupId>net.javacrumbs.shedlock</groupId><artifactId>shedlock-spring</artifactId><version>4.12.0</version></dependency><dependency><groupId…

Redis在项目中的17种使用场景

Redis 是一个开源的高性能键值对数据库&#xff0c;它以其内存中数据存储、键过期策略、持久化、事务、丰富的数据类型支持以及原子操作等特性&#xff0c;在许多项目中扮演着关键角色。以下是V哥整理的17个Redis在项目中常见的使用场景&#xff1a; 缓存&#xff1a;Redis 可以…

PHP全功能微信投票迷你平台系统小程序源码

&#x1f525;让决策变得超简单&#xff01;&#x1f389; &#x1f680;【一键创建&#xff0c;秒速启动】 嘿小伙伴们&#xff0c;你还在为组织投票而手忙脚乱吗&#xff1f;来试试这款全功能投票迷你微信小程序吧&#xff01;只需轻轻一点&#xff0c;无论是班级选举、社团…

硅纪元AI应用推荐 | 百度橙篇成新宠,能写万字长文

“硅纪元AI应用推荐”栏目&#xff0c;为您精选最新、最实用的人工智能应用&#xff0c;无论您是AI发烧友还是新手&#xff0c;都能在这里找到提升生活和工作的利器。与我们一起探索AI的无限可能&#xff0c;开启智慧新时代&#xff01; 百度橙篇&#xff0c;作为百度公司在202…

Python练习题(3)

1.使用requests模块获取这个json文件http://java-api.super-yx.com/html/hello.json 2.将获取到的json转为dict 3.将dict保存为hello.json文件 4.用文件流写一个copy(src,dst)函数,复制hello.json到C:\hello.json import requests import jsondef copy(src, dst):read_file o…

【泛型】学习笔记

1.工作中使用反射去创建对象 例子1Getterprivate int type;private Class<? extends AbstractActivity> clazz;ActivityType(int type, Class<? extends AbstractActivity> clazz) {this.type type;this.clazz clazz;}public AbstractActivity newInstance(Ac…

Spark底层原理:案例解析(第34天)

系列文章目录 一、Spark架构设计概述 二、Spark核心组件 三、Spark架构设计举例分析 四、Job调度流程详解 五、Spark交互流程详解 文章目录 系列文章目录前言一、Spark架构设计概述1. 集群资源管理器&#xff08;Cluster Manager&#xff09;2. 工作节点&#xff08;Worker No…

RabbitMQ中常用的三种交换机【Fanout、Direct、Topic】

目录 1、引入 2、Fanout交换机 案例&#xff1a;利用SpringAMQP演示Fanout交换机的使用 3、Direct交换机 案例&#xff1a;利用SpringAMQP演示Direct交换机的使用 4、Topic交换机 案例&#xff1a;利用SpringAMQP演示Topic交换机的使用 1、引入 真实的生产环境都会经过e…

mysql之导入测试数据

运维时经常要这样&#xff1a;mysql改表名&#xff0c;创建一个一样的表不含数据&#xff0c;复制旧表几条数据进去 改变表的名字&#xff1a; RENAME TABLE old_table_name TO new_table_name; 这将把原来的表old_table_name重命名为new_table_name。 创建一个一样的表结构…

MES实时监控食品加工过程中各环节的安全

在实时监控食品加工过程中各环节的安全风险方面&#xff0c;万界星空科技的MES&#xff08;制造执行系统&#xff09;解决方案发挥了至关重要的作用。以下是具体如何通过MES系统实现实时监控食品加工过程中各环节安全风险的详细阐述&#xff1a; 一、集成传感器与实时监控 MES…