当前位置: 首页 > 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…...

单神经元动态记忆机制及其神经形态计算应用

1. 动态记忆的神经实现范式革新在神经科学与类脑计算领域&#xff0c;动态记忆&#xff08;或称工作记忆&#xff09;一直被视为认知功能的基础模块。传统理论认为&#xff0c;这种能够短暂保持神经活动状态的功能必须依赖于神经元群体构成的递归网络——通过兴奋性神经元间的相…...

Windows curl证书错误SEC_E_UNTRUSTED_ROOT解决方案

1. 这个错误不是curl的问题&#xff0c;而是Windows在替你“把关” 你在Windows命令行里敲下 curl https://api.example.com &#xff0c;结果弹出一串红色报错&#xff1a; curl: (35) schannel: next InitializeSecurityContext failed: Unknown error (0x80092012) - T…...

VIVE Focus3 Unity开发避坑指南:SDK 4.2与XR插件深度适配

1. 这不是SDK安装&#xff0c;而是给Unity项目“接上神经末梢” 刚拿到VIVE Focus3设备时&#xff0c;我把它连上电脑&#xff0c;打开Unity 2021.3.33f1&#xff08;LTS版&#xff09;&#xff0c;照着官网文档点开Package Manager——结果卡在“Loading...”三分钟&#xff0…...

智能戒指制造商Oura秘密提交IPO申请,累计融资15亿美元,付费会员有望破500万

5月22日消息&#xff0c;据《华尔街日报》报道&#xff0c;智能戒指制造商Oura已秘密提交首次公开募股&#xff08;IPO&#xff09;申请。该产品获多位名人称赞&#xff0c;销量可观&#xff0c;此次IPO表现值得关注。产品功能与背景Oura智能戒指能追踪心率、皮肤温度等指标&am…...

夏天来了TEMU爆单指南:我用凌风工具箱“标签模板“搞定夏季爆款

嘿&#xff0c;我是小彭&#xff0c;一个在跨境电商圈摸爬滚打的老玩家&#x1f64b;♂️。这周在朋友圈晒出单周GMV破300万的成绩单&#xff0c;评论区直接炸了&#xff1a;"你这波操作可以啊""啥时候开个课教教我们"。说实话&#xff0c;真没什么高深技巧…...

Spring Boot项目升级FastJson2踩坑记:三个依赖缺一不可,附完整配置代码

Spring Boot项目升级FastJson2实战指南&#xff1a;从依赖管理到配置优化 最近在重构一个老项目时&#xff0c;我决定将FastJson1升级到FastJson2版本。本以为只是简单修改下依赖版本号就能搞定&#xff0c;结果却遭遇了各种"类找不到"的报错。经过两天折腾和源码研…...

探索AI图像智能标注新范式:ComfyUI JoyCaptionAlpha Two插件深度指南

探索AI图像智能标注新范式&#xff1a;ComfyUI JoyCaptionAlpha Two插件深度指南 【免费下载链接】ComfyUI_SLK_joy_caption_two ComfyUI Node 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_SLK_joy_caption_two 在AI图像生成与内容创作领域&#xff0c;手动为…...

魔兽争霸III终极优化指南:5大功能彻底解决现代系统兼容性问题

魔兽争霸III终极优化指南&#xff1a;5大功能彻底解决现代系统兼容性问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸III在现代电脑…...

Udemy课程下载器:如何高效离线学习Udemy课程内容?

Udemy课程下载器&#xff1a;如何高效离线学习Udemy课程内容&#xff1f; 【免费下载链接】udemy-downloader-gui A desktop application for downloading Udemy Courses 项目地址: https://gitcode.com/gh_mirrors/ud/udemy-downloader-gui 想要随时随地学习Udemy课程却…...

3DS Pokémon ROM 编辑器 pk3DS:新手入门完全指南

3DS Pokmon ROM 编辑器 pk3DS&#xff1a;新手入门完全指南 【免费下载链接】pk3DS Pokmon (3DS) ROM Editor & Randomizer 项目地址: https://gitcode.com/gh_mirrors/pk/pk3DS pk3DS 是一款功能强大的任天堂 3DS 平台 Pokmon 系列游戏 ROM 编辑器和随机化工具&…...