利用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.cn
  const 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记录与分析网页抓取中的性能数据,并通过实例代码展示了如何实现这一过程。希望本文能为您的网页抓取工作提供有价值的参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/885335.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI大模型技术已是中小企业数字化转型的战略资源

中小企业数字化转型面临资金、技术、数据隐私和安全等多重挑战,大模型技术的崛起为其提供了新的机遇。 大模型技术凭借庞大的参数和数据处理能力,推动行业创新,展现AI技术的巨大潜力。它提供成本效益高的AI服务,降低技术门槛&…

CMake教程(八):添加定制命令和生成的文件

本篇继续 CMake 官网教程的第八篇教程,所用材料是 Step8 目录下的源代码。 本篇教程主要讲解如何通过 CMake 生成一个头文件,该头文件当中包含了 1 到 10 的平方根表格,然后在程序的其它部分包含这个生成的头文件。 出于教学的目的&#xf…

OpenStack Yoga版安装笔记(十四)启动一个实例

1、官方文档 OpenStack Installation Guidehttps://docs.openstack.org/install-guide/ 本次安装是在Ubuntu 22.04上进行,基本按照OpenStack Installation Guide顺序执行,主要内容包括: 环境安装 (已完成)OpenStack…

三款专业的英文文献翻译工具,翻译论文不在话下

阅读英文论文文献时免不了要借用一些翻译软件来帮助理解,但因为论文文献的特殊性,普通的翻译软件不能很好的翻译一些专业名词和术语,所以这里给大家分享三款可以胜任文献翻译的专业翻译工具,可以快速准确的完成英文文献翻译工作。…

CSS选择器的全面解析与实战应用

CSS选择器的全面解析与实战应用 一、基本选择器1.1 通配符选择器(*)2.标签选择器(div)1.3 类名选择器(.class)4. id选择器(#id) 二、 属性选择器(attr)三、伪…

书生大模型实战(从入门到进阶)L3-彩蛋岛-InternLM 1.8B 模型 Android 端侧部署实践

目录 1 环境准备 1.1 安装rust 1.2 安装Android Studio 1.3 设置环境变量 2 转换模型 2.1 安装mlc-llm 2.2 (可选)转换参数 2.3 (可选)生成配置 2.4 (可选)上传到huggingface 2.5 (可选) 测试转换的模型 3 打包运行 3.1 修改配置文件 3.2 运行打包命令 3.3 创建签…

UEFI EDK2框架学习(三)——protocol

一、Protocol协议 搜索支持特定Protocol的设备&#xff0c;获取其Handle gBS->LocateHandleBuffer 将内存中的Driver绑定到给定的ControllerHandle gBS->OpenProtocol 二、代码实现 Protocol.c #include <Uefi.h> #include <Library/UefiLib.h> #includ…

宠物医院微信小程序源码

文章目录 前言研究背景研究内容一、主要技术&#xff1f;二、项目内容1.整体介绍&#xff08;示范&#xff09;2.系统分析3.数据表信息4.运行截图5.部分代码介绍 总结 前言 随着当代社会科技的迅速发展&#xff0c;计算机网络时代正式拉来帷幕&#xff0c;它颠覆性的影响着社会…

spring模块都有哪些

Spring 框架是一个庞大而灵活的生态系统&#xff0c;它包含了多个模块&#xff0c;每个模块都提供了特定的功能和服务。以下是一些主要的 Spring 模块&#xff1a; Spring Core&#xff1a; 核心容器&#xff0c;提供了 IoC&#xff08;控制反转&#xff09;和 DI&#xff08;…

React学习笔记(2.0)

React事件绑定 语法&#xff1a;在对应标签上书写on事件&#xff08;比如onClick,onChange&#xff09;&#xff0c;注意和原生的事件区分&#xff0c;React的事件首字母要大写。 const handleChange(e:any)>{console.log(e);console.log(change事件触发);// e不是原生事件…

javascript promise的使用

Promise是异步编程的一种解决方案。 它能优雅的方式来处理异步操作&#xff0c;避免产生回调地狱&#xff0c;这样的代码难看而且不容易维护。 普通方式调用&#xff1a;处理异常的时候&#xff0c;用逗号隔开 链式调用&#xff1a; // 1.使用setTimeout// setTimeout(() >…

2024重生之回溯数据结构与算法系列学习(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】

欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 专栏跑道一 ➡️ MYSQL REDIS Advance operation 专栏跑道二➡️ 24 Network Security -LJS ​ ​ ​ 专栏跑道三 ➡️HCIP&#xff1b;H3C-SE;CCIP——LJS[华为、华三、思科高级网络]…

BCJR算法——卷积码的最大后验译码

定义&#xff1a;输入序列为 其中每比特&#xff0c;同时相应的输出序列为 其中每一码字的长度为n&#xff0c;定义在i时刻的编码器的状态为&#xff0c;对于时刻里有 表示输出码字和卷积码第i时刻的输入和第i-1时刻的状态有关&#xff08;包括寄存器和输出部分&#xff09;&am…

第一弹:llama.cpp编译

1.编译llama.cpp命令行&#xff08;电脑版本&#xff09;&#xff1b; 2.交叉编译安卓命令行版本。 一、Llama.cpp是什么&#xff1f; 二、Llama.cpp编译 首先我们尝试编译llama.cpp. 2.1 下载llama.cpp 项目的github地址&#xff1a; https://github.com/ggerganov/llama…

Teams集成-会议侧边栏应用开发-会议转写

Teams应用开发&#xff0c;主要是权限比较麻烦&#xff0c;大量阅读和实践&#xff0c;摸索了几周&#xff0c;才搞明白。现将经验总结如下&#xff1a; 一、目标&#xff1a;开发一个Teams会议的侧边栏应用&#xff0c;实现会议的实时转写。 二、前提&#xff1a; 1&#x…

读代码UNET

这个后面这个大小怎么算的&#xff0c;这参数怎么填&#xff0c;怎么来的&#xff1f; 这是怎么看怎么算的&#xff1f; 这些参数设置怎么设置&#xff1f;卷积多大&#xff0c;有什么讲究&#xff1f;

linux 系统磁盘空间查看与清理

正常清理步骤 首先查看文件和目录的使用空间&#xff0c;系统/根目录下的文件夹一般情况不会占用大的磁盘空间&#xff0c;因此可主要查看您创建的目录或文件等 文件大小 使用ls -alh命令来查看&#xff0c;比如下方的.bashrc、.profile文件的大小。但是看到的文件夹大小仅仅…

全面解说OpenAI o1三部曲:下篇-乞丐版o1-mini

简介 小伙伴们好&#xff0c;我是微信公众号《小窗幽记机器学习》的小编&#xff1a;卖海参的小女孩。OpenAI 发布的o1 是一个系列模型。除了o1-preview&#xff0c;官方还一并发布了一个 mini 版&#xff1a;OpenAI o1-mini。o1-mini是面向开发者&#xff0c;兼顾成本和效益。…

Solidity智能合约中的异常处理(error、require 和 assert)

Solidity 中的三种抛出异常方法&#xff1a;error、require 和 assert 在 Solidity 开发中&#xff0c;异常处理是确保智能合约安全性和正确性的关键步骤。Solidity 提供了三种主要方法来抛出异常&#xff1a;error、require 和 assert。本文将详细介绍这三种方法的用途、实现方…

算法:按既定顺序创建目标数组

力扣1389 提示&#xff1a; 1 < nums.length, index.length < 100nums.length index.length0 < nums[i] < 1000 < index[i] < i 题解&#xff1a; class Solution {public int[] createTargetArray(int[] nums, int[] index) {int[] target new int[num…