当前位置: 首页 > news >正文

利用Puppeteer-Har记录与分析网页抓取中的性能数据

爬虫代理

引言

在现代网页抓取中,性能数据的记录与分析是优化抓取效率和质量的重要环节。本文将介绍如何利用Puppeteer-Har工具记录与分析网页抓取中的性能数据,并通过实例展示如何实现这一过程。

Puppeteer-Har简介

Puppeteer是一个Node.js库,提供了一个高级API来控制Chrome或Chromium浏览器。Har(HTTP Archive)文件格式用于记录网页加载过程中的所有HTTP请求和响应。Puppeteer-Har结合了这两者的优势,使得开发者可以轻松地记录和分析网页抓取中的性能数据。

环境准备

在开始之前,请确保已安装Node.js和npm。然后,安装Puppeteer和puppeteer-har:

npm install puppeteer puppeteer-har
使用代理IP技术

为了避免IP封禁,我们将使用代理IP技术。以下代码示例中使用了爬虫代理的域名、端口、用户名和密码。

实例代码

以下是一个完整的代码示例,展示了如何使用Puppeteer-Har记录和分析今日头条(https://www.toutiao.com)的性能数据,并进行数据归类和存储。

const puppeteer = require('puppeteer');
const { PuppeteerHar } = require('puppeteer-har');(async () => {// 启动浏览器并设置代理 亿牛云爬虫代理www.16yun.cnconst browser = await puppeteer.launch({args: ['--proxy-server=http://代理域名:代理端口']});const page = await browser.newPage();// 设置代理认证await page.authenticate({username: '代理用户名',password: '代理密码'});// 创建HAR记录器const har = new PuppeteerHar(page);// 开始记录HAR文件await har.start({ path: 'results.har' });// 导航到目标页面await page.goto('https://www.toutiao.com');// 等待页面加载完成await page.waitForTimeout(5000);// 停止记录HAR文件await har.stop();// 关闭浏览器await browser.close();console.log('HAR文件已生成');
})();
数据分析与存储

生成的HAR文件包含了所有HTTP请求和响应的数据。我们可以使用各种工具(如Chrome DevTools或在线HAR查看器)来分析这些数据。以下是一个简单的示例,展示如何解析HAR文件并提取新闻要点和评论。

const fs = require('fs');// 读取HAR文件
const harData = JSON.parse(fs.readFileSync('results.har', 'utf8'));// 提取新闻要点和评论
const entries = harData.log.entries;
const newsData = entries.filter(entry => entry.request.url.includes('toutiao.com'));newsData.forEach(entry => {console.log(`URL: ${entry.request.url}`);console.log(`Status: ${entry.response.status}`);console.log(`Response Time: ${entry.time}ms`);console.log('--------------------------------');
});// 将数据存储到文件
fs.writeFileSync('newsData.json', JSON.stringify(newsData, null, 2), 'utf8');
console.log('新闻数据已存储到newsData.json');
结论

通过本文的介绍,我们了解了如何利用Puppeteer-Har记录与分析网页抓取中的性能数据,并通过实例代码展示了如何实现这一过程。希望本文能为您的网页抓取工作提供有价值的参考。

相关文章:

  • 网络安全 DVWA通关指南 DVWA Weak Session IDs(弱会话)
  • C++中数据类型的大小
  • 【spring中event】事件简单使用
  • 【MySQL】数据目录迁移
  • 前端 vue3 对接科大讯飞的语音在线合成API
  • 详细指南:如何有效解决Windows系统中msvcp140.dll丢失的解决方法
  • 【cache】浅析四种常用的缓存淘汰算法 FIFO/LRU/LFU/W-TinyLFU
  • spark计算引擎-架构和应用
  • git 基本原理
  • 【项目开发】跨专业合作平台实战(附源码)
  • 初学51单片机之I2C总线与E2PROM二
  • c语言基础作业
  • YOLO11关键改进与网络结构图
  • mysql学习教程,从入门到精通,SQL 修改表(ALTER TABLE 语句)(29)
  • 负载均衡--会话保持失败原因及解决方案(五)
  • Consul Config 使用Git做版本控制的实现
  • Hibernate【inverse和cascade属性】知识要点
  • httpie使用详解
  • HTTP--网络协议分层,http历史(二)
  • Java-详解HashMap
  • JS字符串转数字方法总结
  • leetcode-27. Remove Element
  • Material Design
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Spring Cloud Feign的两种使用姿势
  • TypeScript实现数据结构(一)栈,队列,链表
  • 爱情 北京女病人
  • 闭包--闭包之tab栏切换(四)
  • 产品三维模型在线预览
  • 坑!为什么View.startAnimation不起作用?
  • 使用parted解决大于2T的磁盘分区
  • 算法系列——算法入门之递归分而治之思想的实现
  • No resource identifier found for attribute,RxJava之zip操作符
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #QT(智能家居界面-界面切换)
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (03)光刻——半导体电路的绘制
  • (13)DroneCAN 适配器节点(一)
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (C语言)逆序输出字符串
  • (day 12)JavaScript学习笔记(数组3)
  • (二)fiber的基本认识
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (六)DockerCompose安装与配置
  • (三) diretfbrc详解
  • (学习总结)STM32CubeMX HAL库 学习笔记撰写心得
  • (正则)提取页面里的img标签
  • (转)fock函数详解
  • .Net Core 微服务之Consul(二)-集群搭建
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .net 获取某一天 在当月是 第几周 函数