如何利用 Puppeteer 的 Evaluate 函数操作网页数据

爬虫代理

介绍

在现代的爬虫技术中,Puppeteer 因其强大的功能和灵活性而备受青睐。Puppeteer 是一个用于控制 Chromium 或 Chrome 浏览器的 Node.js 库,提供了丰富的 API 接口,能够帮助开发者高效地处理动态网页数据。本文将重点讲解 Puppeteer 的 evaluate 函数,结合代理 IP 技术,演示如何采集目标网站(如界面新闻)上的文章标题和摘要。

界面新闻作为中国具有影响力的原创财经新媒体,其市场特点体现在内容聚合开放生产、发力短视频与直播、综合服务功能提升以及助力社会治理意识加强等方面。界面新闻通过开放平台,掌握用户数据,提升内容生产和传播的精准性,同时,短视频和直播已成为其内容生产力的重要组成部分,增强了新闻报道的即时性。此外,界面新闻客户端在版本迭代过程中,业务边界不断拓展,服务功能愈加凸显,逐渐向“新闻+政务+服务+商务”的综合性平台转型。

从新闻热点的角度来看,界面新闻客户端中信息内容同质化依旧明显,原创优质内容供应不足,但重要时政新闻、突发事件能够获得大多数媒体的关注。因此,使用 Puppeteer 的 evaluate 函数和代理 IP 技术采集界面新闻的文章标题和摘要时,可以更精准地定位到这些热点新闻,为用户提供更加丰富和深入的财经新闻内容。同时,代理 IP 技术的应用可以有效地规避网站的反爬虫机制,提高数据采集的成功率和稳定性。

通过 Puppeteer 的 evaluate 函数,开发者可以在页面的上下文中执行 JavaScript 代码,从而获取页面中的特定数据,如文章标题和摘要。结合代理 IP 技术,可以在不同的地理位置模拟用户访问,减少被目标网站封禁的风险,这对于采集界面新闻这类高质量财经新闻内容尤为重要。通过这种方式,可以为界面新闻的用户提供更加丰富和深入的财经新闻内容,满足他们对高质量信息的需求。

技术分析

Puppeteer 的 Evaluate 函数

evaluate 是 Puppeteer 的核心函数之一。通过该函数,开发者可以在浏览器上下文中执行 JavaScript 代码,直接操作 DOM 树,从而提取网页中的数据。

核心使用步骤包括:

  1. 在浏览器中打开页面。
  2. 使用 page.evaluate 在页面上下文执行自定义脚本,获取需要的数据。
  3. 将数据从浏览器上下文传递到 Node.js 脚本。

代理 IP 的使用

由于频繁的爬虫行为可能会被目标网站检测并封禁 IP 地址,因此引入代理 IP 是非常必要的。我们以爬虫代理服务为例,通过设置代理服务器的域名、端口、用户名和密码,安全稳定地采集网页数据。

实现细节

在代码中,我们将使用以下技术和工具:

  • 设置代理 IP:使用爬虫代理服务。
  • 自定义 Cookie 和 User-Agent:模拟真实用户行为,降低被目标网站封禁的风险。
  • 数据存储:将提取的文章标题和摘要存储到本地文件中。

以下是完整实现代码。


实现代码

const puppeteer = require('puppeteer');// 配置IP代理服务参数 亿牛云爬虫代理 www.16yun.cn
const PROXY_HOST = "PROXY.16yun.cn"; // 16yun代理服务器
const PROXY_PORT = "12345"; // 端口
const PROXY_USERNAME = "代理用户名"; // 例如:yourUsername
const PROXY_PASSWORD = "代理密码"; // 例如:yourPassword// 配置目标网站和输出文件
const TARGET_URL = "https://www.jiemian.com";
const OUTPUT_FILE = "articles.json";(async () => {// 启动浏览器并设置代理const browser = await puppeteer.launch({headless: true, // 无头模式args: [`--proxy-server=http://${PROXY_HOST}:${PROXY_PORT}` // 配置代理]});const page = await browser.newPage();// 设置代理的认证信息await page.authenticate({username: PROXY_USERNAME,password: PROXY_PASSWORD});// 设置 User-Agent 和 Cookieawait page.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36");await page.setCookie({name: "exampleCookie",value: "exampleValue",domain: ".jiemian.com"});try {// 打开目标页面await page.goto(TARGET_URL, { waitUntil: "networkidle2" });// 使用 evaluate 函数提取数据const articles = await page.evaluate(() => {const data = [];const articleElements = document.querySelectorAll(".news-item"); // 根据界面新闻的 DOM 结构选择器articleElements.forEach((item) => {const title = item.querySelector(".news-item-title")?.innerText?.trim();const summary = item.querySelector(".news-item-summary")?.innerText?.trim();if (title && summary) {data.push({ title, summary });}});return data;});// 将数据写入文件const fs = require("fs");fs.writeFileSync(OUTPUT_FILE, JSON.stringify(articles, null, 2), "utf-8");console.log(`数据已成功保存到 ${OUTPUT_FILE}`);} catch (error) {console.error("爬取过程中发生错误:", error);} finally {// 关闭浏览器await browser.close();}
})();

结论

本文详细介绍了如何利用 Puppeteer 的 evaluate 函数操作网页数据,结合代理 IP 和用户模拟技术,实现了从界面新闻上采集文章标题和摘要的功能。通过这种方法,开发者不仅可以高效地处理动态网页,还能有效规避 IP 限制等问题。

如果您需要更稳定的采集体验,建议搭配高质量的代理服务如爬虫代理,确保采集任务的高效完成。未来,随着爬虫技术和反爬策略的不断发展,我们也应积极学习并应用新技术,提升数据采集的能力和效率。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“小浣熊家族AI办公助手”产品体验 — “人人都是数据分析师”

一、引言: 大家平时应该在工作中常常使用到Excel来做数据统计,比如临近过年时,公司一般会开各种复盘、年终、检讨、明年规划大会,势必需要准备一大堆的量化数据报表,用于会议上的数据汇报、分析工作,试想一…

Unity-添加世界坐标系辅助线

如果你想在场景中更直观地显示世界坐标系,可以通过编写一个简单的脚本来实现。下面是一个基本的示例脚本,它会在场景中绘制出世界坐标系的三个轴: using UnityEngine;public class WorldAxesIndicator : MonoBehaviour {public float length…

Makefile基础应用

1 使用场景 在Linux环境下,我们通常需要通过命令行来编译代码。例如,在使用gcc编译C语言代码时,需要使用以下命令。 gcc -o main main.c 使用这种方式编译代码非常吃力,每次调试代码都需要重新在命令行下重新编译,重复…

【tensorflow的安装步骤】

创建一个虚拟环境 conda create -n tensorflow python3.6激活虚拟环境 conda activate tensorflow使用镜像源下载 pip install tensorflow1.15.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/特别特别重要的点!!! 别用WiFi或者校园网下…

【Python · PyTorch】循环神经网络 RNN(基础概念)

【Python PyTorch】循环神经网络 RNN(基础概念) 0. 生物学相似性1. 概念2. 延时神经网络(TDNN)3. 简单循环神经网络(Simple RNN)3.1 BiRNN 双向循环神经网络3.2 特点记忆性参数共享图灵完备 3.3 网络结构3…

使用EFK收集k8s日志

首先我们使用EFK收集Kubernetes集群中的日志,本次实验讲解的是在Kubernetes集群中启动一个Elasticsearch集群,如果企业内已经有了Elasticsearch集群,可以直接将日志输出至已有的Elasticsearch集群。 文章目录 部署elasticsearch创建Kibana创建…

Qt入门1——认识Qt的几个常用头文件和常用函数

1.头文件 ① #include <QPushButton>——“按钮”头文件&#xff1b; ② #include <QLabel>——“标签”头文件&#xff1b; ③ #include <QFont>——“字体”头文件&#xff1b; ④#include <QDebug>——输出相关信息&#xff1b; 2. 常用函数/类的基…

【Linux驱动开发】irq中断配置API及中断应用 阻塞休眠和非阻塞的驱动操作

【Linux驱动开发】irq中断配置API及中断应用 阻塞休眠和非阻塞的驱动操作 文章目录 中断操作注册和释放中断中断服务函数使能和禁止上半部和下半部软中断tasklet工作队列 设备节点中的中断中断号API函数获取中断号获取中断信息 中断应用读取设备树节点获取中断号获取中断触发方…

Linux设置以及软件的安装(hadoop集群安装02)

一、Linux的常见设置 1、设置静态IP vi /etc/sysconfig/network-scripts/ifcfg-ens33 如何查看自己的虚拟机的网关&#xff1a; 完整的配置&#xff08;不要拷贝我的&#xff09;&#xff1a; TYPE"Ethernet" PROXY_METHOD"none" BROWSER_ONLY"no&…

excel版数独游戏(已完成)

前段时间一个朋友帮那小孩解数独游戏&#xff0c;让我帮解&#xff0c;我看他用电子表格做&#xff0c;只能显示&#xff0c;不能显示重复&#xff0c;也没有协助解题功能&#xff0c;于是我说帮你做个电子表格版的“解题助手”吧&#xff0c;不能直接解题&#xff0c;但该有的…

网络安全,文明上网(5)注重隐私加密

前言 为了维护个人数据和通信的安全&#xff0c;防止非法获取或泄露&#xff0c;可以采用多种隐私保护技术。 技术要点 1. 个人数据去标识化和匿名化方法&#xff1a; K匿名性(K-Anonymity)&#xff1a;由Sweeney提出&#xff0c;通过对个人数据进行匿名化处理&#xff…

【Unity】 GamePlay开发:通用的检查点/成就/条件触发系统

特别适用于各种解谜关卡, 成就系统&#xff0c;任务系统&#xff0c;的 通用事件处理 CheckPointHandler.cs随便挂在场景中的某个物体上 (单例模式&#xff0c;场景中只要有一个&#xff09; 1) How To Use CheckPoint Events是一个列表&#xff0c;每个元素是一个组合事件&…

P1 练习卷(C++4道题)

1.纷繁世界 内存限制&#xff1a;256MB 时间限制&#xff1a;1s 问题描述 这是一个纷繁复杂的世界。 某一天清晨你起床很迟&#xff0c;没有吃上早饭。于是你骑着自行车去超市&#xff0c;但是你又发现商店的工作人员已经重新贴上了价格标签&#xff0c;零食价格都涨了50%。你…

私有化部署视频平台EasyCVR宇视设备视频平台如何构建视频联网平台及升级视频转码业务?

在当今数字化、网络化的时代背景下&#xff0c;视频监控技术已广泛应用于各行各业&#xff0c;成为保障安全、提升效率的重要工具。然而&#xff0c;面对复杂多变的监控需求和跨区域、网络化的管理挑战&#xff0c;传统的视频监控解决方案往往显得力不从心。 EasyCVR视频融合云…

物体网格弹性变形---Unity中实现

在游戏引擎场景中的3D物体是由一定数量的点、面组成的&#xff0c;如下图&#xff1a; 要使这些物体变形就是改变3D物体每个顶点状态。 1.首先在Unity场景中增加一个球体&#xff0c;如下图 3D组件默认拥有MeshFilter、meshRenderer、Collider组件&#xff0c;分别用来获取Mes…

Java爬虫:获取商品详情的实践之旅

在当今这个信息爆炸的时代&#xff0c;数据的价值日益凸显。对于电商行业来说&#xff0c;商品详情的获取尤为重要&#xff0c;它不仅关系到产品的销售&#xff0c;还直接影响到用户体验。传统的人工获取方式耗时耗力&#xff0c;而自动化的爬虫技术则提供了一种高效解决方案。…

【LLM】一文学会SPPO

博客昵称&#xff1a;沈小农学编程 作者简介&#xff1a;一名在读硕士&#xff0c;定期更新相关算法面试题&#xff0c;欢迎关注小弟&#xff01; PS&#xff1a;哈喽&#xff01;各位CSDN的uu们&#xff0c;我是你的小弟沈小农&#xff0c;希望我的文章能帮助到你。欢迎大家在…

腾讯云 AI 代码助手:产品研发过程的思考和方法论

一、文章摘要 本文将详细阐述 腾讯云 AI 代码助手的历史发展形态与产品整体架构&#xff0c;并从技术、研发方法论的角度分别阐述了产品的研发过程。 全文阅读约 5&#xff5e;8 分钟。 二、产品布局 AI 代码助手产品经历了三个时代的发展 第一代诸如 Eclipse、Jetbrains、V…

RabbitMQ实现异步下单与退单

前言&#xff1a; 在电商项目中的支付模块也是一个很重要的模块&#xff0c;其中下订操作以及退订操作就是主要的操作。其次的下单是同步下单&#xff0c;也就是第三方支付、数据库扣减、积分增加、等等其他业务操作&#xff0c;等待全部执行完毕后向用户返回成功响应请求。对…

SQL99版全外连接和交叉连接和总结

全外连接MySQL不支持 elect 查询列表 from 表名1 表别名1 cross join 表名2 表别名2 on 连接条件 ...... ; 交叉连接 就两个记录做笛卡尔积&#xff01;没什么好说的&#xff0c;基本也没用过&#xff01; 总结