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

如何利用 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 限制等问题。

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

相关文章:

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

介绍 在现代的爬虫技术中,Puppeteer 因其强大的功能和灵活性而备受青睐。Puppeteer 是一个用于控制 Chromium 或 Chrome 浏览器的 Node.js 库,提供了丰富的 API 接口,能够帮助开发者高效地处理动态网页数据。本文将重点讲解 Puppeteer 的 ev…...

SpringMVC接收请求参数

(5)请求参数》五种普通参数 1.普通参数 代码块 RequestMapping("/commonParam") ResponseBody public String commonParam(String name,int age){System.out.println("普通参数传递 name > "name);System.out.println("普通…...

安宝特方案 | AR助力紧急救援,科技守卫生命每一刻!

在生死时速的紧急救援战场上,每一秒都至关重要!随着科技的发展,增强现实(AR)技术正在逐步渗透到医疗健康领域,改变着传统的医疗服务模式。 安宝特AR远程协助解决方案,凭借其先进的技术支持和创新…...

蓝桥杯每日真题 - 第18天

题目:(出差) 题目描述(13届 C&C B组E题) 解题思路: 问题分析 问题实质是一个带权图的最短路径问题,但路径的权重包含两个部分: 从当前城市到下一个城市的路程时间。 当前城市的…...

HTTP 协议应用场景

一、HTTP 协议简介 HTTP(Hypertext Transfer Protocol)即超文本传输协议,是用于分布式、协作式和超媒体信息系统的应用层协议,是互联网数据通信的基础。它采用客户端 - 服务器(Client-Server)的通信模式&am…...

【Linux庖丁解牛】—Linux基本指令(下)!

目录 1、grep指令 2、zip/unzip指令 3、sz/rz指令 4、tar指令 ​编辑 5、scp指令 6、bc指令 7、uname –r指令 8、重要的几个热键 9、关机 10、完结撒花 1、grep指令 grep是文本过滤器,其作用是在指定的文件中过滤出包含你指定字符串的内容,…...

python: generator model using sql server 2019

設計或生成好數據庫,可以生成自己設計好的框架項目 # encoding: utf-8 # 版权所有 :2024 ©涂聚文有限公司 # 许可信息查看 :言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述: : 生成实体 # Author …...

Kafka怎么发送JAVA对象并在消费者端解析出JAVA对象--示例

1、在pom.xml中加入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-kafka</artifactId><version>3.1.6</version></dependency> 2、配置application.yml 加入Kafk…...

深度学习(1)

一、torch的安装 基于直接设备情况&#xff0c;选择合适的torch版本&#xff0c;有显卡的建议安装GPU版本&#xff0c;可以通过nvidia-smi命令来查看显卡驱动的版本&#xff0c;在官网中根据cuda版本&#xff0c;选择合适的版本号&#xff0c;下面是安装示例代码 GPU&#xff…...

golang 嵌入式armv7l压缩编译打包

编译 Go 应用程序 go build -ldflags"-s -w" -o myapp.exe . 使用 UPX 压缩可执行文件&#xff08;window下载并设置环境变量&#xff09; upx --best --lzma myapp.exe 可从10M压缩到1M 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 …...

Makefile 之 join

join $(join <list1>,<list2> ) 名称&#xff1a;连接函数——join。 功能&#xff1a;把<list2>中的单词对应地加到<list1>的单词后面。如果<list1>的单词个数要比<list2>的多&#xff0c; 那么&#xff0c;<list1>中的多出…...

集合卡尔曼滤波(Ensemble Kalman Filter),用于二维滤波(模拟平面上的目标跟踪),MATLAB代码

集合卡尔曼滤波&#xff08;Ensemble Kalman Filter&#xff09; 文章目录 引言理论基础卡尔曼滤波集合卡尔曼滤波初始化预测步骤更新步骤卡尔曼增益更新集合 MATLAB 实现运行结果3. 应用领域结论 引言 集合卡尔曼滤波&#xff08;Ensemble Kalman Filter, EnKF&#xff09;是…...

北京申请中级职称流程(2024年)

想找个完整详细点的申请流程资料真不容易&#xff0c;做个分享送给需要的人吧。 不清楚为什么说文章过度宣传&#xff0c;把链接和页面去掉了&#xff0c;网上自己找一下。 最好用windows自带的EDGE浏览器打开申请网站&#xff0c;只有在开始申请的时间内才可以进行网上申报&…...

ubuntu.24安装cuda

1.下载CUDA Toolkit https://developer.nvidia.com/cuda-toolkit-archive 2.按照命令下载&#xff0c;安装 sudo sh cuda_12.2.2_535.104.05_linux.run 3.环境变量 sudo vi /etc/profile 最后面添加 export PATH“/usr/local/cuda-12.2/bin: P A T H " e x p o r t L D L…...

unity li2cpp逆向原理是什么?

主要涉及将Unity游戏引擎中的C#代码转换为C代码&#xff0c;并进一步编译为各平台的原生&#xff08;Native&#xff09;代码的过程&#xff0c;以及逆向工程工具如何利用这一过程中的特定文件来还原和分析原始代码。以下是对Unity IL2CPP逆向原理的详细解释&#xff1a; 对惹…...

Python网络爬虫实践案例:爬取猫眼电影Top100

以下是一个Python网络爬虫的实践案例&#xff0c;该案例将演示如何使用Python爬取猫眼电影Top100的电影名称、主演和上映时间等信息&#xff0c;并将这些信息保存到TXT文件中。此案例使用了requests库来发送HTTP请求&#xff0c;使用re库进行正则表达式匹配&#xff0c;并包含详…...

卷积神经网络(CNN)中的权重(weights)和偏置项(bias)

在卷积神经网络&#xff08;CNN&#xff09;中&#xff0c;权重&#xff08;weights&#xff09;和偏置项&#xff08;bias&#xff09;是两个至关重要的参数&#xff0c;它们在网络的学习和推断过程中起着关键作用。 一、权重&#xff08;Weights&#xff09; 1. 定义&#xf…...

华为FusionCube 500-8.2.0SPC100 实施部署文档

环境&#xff1a; 产品&#xff1a;FusionCube 500版本&#xff1a;8.2.0.SPC100场景&#xff1a;虚拟化基础设施平台&#xff1a;FusionCompute两节点 MCNA * 2硬件部署&#xff08;塔式交付场景&#xff09;免交换组网&#xff08;配置AR卡&#xff09; 前置准备 组网规划 节…...

Android 网络请求(二)OKHttp网络通信

学习笔记 OkHttp 是一个非常强大且流行的 HTTP 客户端库&#xff0c;广泛用于 Android 开发中进行网络请求。与 HttpURLConnection 相比&#xff0c;OkHttp 提供了更简单、更高效的 API&#xff0c;特别是在处理复杂的 HTTP 请求时。 如何使用 OkHttp 进行网络请求 以下是使…...

npm上传自己封装的插件(vue+vite)

一、npm账号及发包删包等命令 若没有账号&#xff0c;可在npm官网&#xff1a;https://www.npmjs.com/login 进行注册。 在当前项目根目录下打开终端命令窗口&#xff0c;常见命令如下&#xff1a; 1、登录命令&#xff1a;npm login&#xff08;不用每次都重新登录&#xff0…...

Qt 实时数据可视化工程实践:环形缓冲区实践

目录 前言 一、架构设计 1.1 分层架构图 1.2 数据写入流 1.3 数据刷新流 (定时器驱动 → 视图更新) 1.4 核心设计思想 二、核心实现详解 2.1 RingBuffer&#xff1a;环形缓冲区实现 2.1.1 append函数&#xff08;线程安全写入&#xff09; 函数主体实现&#xff1a; …...

坚果云官方 Zotero 插件实测体验(完美适配 Zotero 7/8)

天下科研苦“文献同步”久矣&#xff01;如果你一直在用 Zotero 坚果云 WebDAV 方案&#xff0c;那你大概率踩过这些坑&#xff1a;❌ 繁琐的配置&#xff1a;要去网页端找入口、加应用、生成密码、再复制一长串服务器地址。❌ 频发 429 报错&#xff1a;同步文件一多&#xf…...

zh3100组合式选粉机的设计【说明书+27张CAD图纸】

zh3100组合式选粉机作为粉体分级领域的核心设备&#xff0c;其设计融合了流体力学、机械传动与颗粒分离理论&#xff0c;通过优化结构参数与气固两相流场分布&#xff0c;实现高精度、低能耗的粉体分级作业。该设备采用模块化组合设计理念&#xff0c;将选粉室、导流装置、分级…...

SimpleMem:基于语义无损压缩的三阶段 Agent 终身记忆框架

&#x1f4cc; 一句话总结&#xff1a; 本工作提出 SimpleMem&#xff0c;一个基于语义结构化压缩的终身记忆系统&#xff0c;通过“压缩—合成—规划”三阶段机制&#xff0c;在固定上下文预算下显著提升 LLM Agent 的长期交互能力与检索效率。 &#x1f50d; 背景问题&…...

VIT模型IP核需要修改的地方

导入路径 "D:\VIT\HG-PIPE\instances\proj_ATTN0\work"选择“open project”整合多个 HLS IP 时 遇到“撞名”此时会报错&#xff1a;Top function not found: there is no function named top INFO: [HLS 200-1510] Running: set_directive_top -name top top...

CODESYS开发教程7-变量作用域与存储类型实战解析

1. 变量作用域&#xff1a;从菜市场到保险箱的生动比喻 刚接触CODESYS开发时&#xff0c;我总被各种变量作用域搞得晕头转向。直到有天去菜市场买菜&#xff0c;突然发现变量作用域和菜市场的摊位布局简直一模一样&#xff01;全局变量就像菜市场入口处的公共电子屏&#xff0c…...

Polars 2.0大规模清洗性能翻倍的7个底层优化技巧:基于真实金融风控流水线压测数据

第一章&#xff1a;Polars 2.0大规模数据清洗性能跃迁的工程意义Polars 2.0 的发布标志着 Rust 原生 DataFrame 库在工程落地层面实现关键突破——其基于 Arrow 2.0 和全新查询优化器&#xff08;QOv2&#xff09;重构的执行引擎&#xff0c;将典型 ETL 清洗任务的吞吐量提升达…...

Agent-S实战指南:突破性智能体框架如何实现72.6%人类级计算机交互性能

Agent-S实战指南&#xff1a;突破性智能体框架如何实现72.6%人类级计算机交互性能 【免费下载链接】Agent-S Agent S: an open agentic framework that uses computers like a human 项目地址: https://gitcode.com/GitHub_Trending/ag/Agent-S 在人工智能与计算机交互的…...

Qwen3.5-4B-Claude-Opus部署案例:FastAPI+supervisor托管的生产级Web服务搭建

Qwen3.5-4B-Claude-Opus部署案例&#xff1a;FastAPIsupervisor托管的生产级Web服务搭建 1. 模型与部署概述 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF 是一个基于 Qwen3.5-4B 的推理蒸馏模型&#xff0c;重点强化了结构化分析、分步骤回答、代码与逻辑类问题的处…...

【效率翻倍】不止是安装:用Apache 2.4 + Win10快速搭建本地PHP/WordPress测试环境

效率翻倍&#xff1a;Apache 2.4 Win10 构建全功能PHP/WordPress开发环境实战指南 在本地开发环境中快速搭建Web服务器是每个PHP开发者或WordPress站长的必备技能。传统教程往往止步于Apache的基础安装&#xff0c;却忽略了实际开发中需要的完整工具链——从PHP解释器集成到虚…...