【18】爬虫神器 Pyppeteer 的使用
目录
一、Pyppeteer 介绍
二、安装库
三、快速上手
Python爬虫案例 | Scrape Center
在前面我们学习了 Selenium 的基本用法,它功能的确非常强大,但很多时候我们会发现 Selenium 有一些不太方便的地方,比如环境的配置,得安装好相关浏览器,比如 Chrome、Firefox 等等,然后还要到官方网站去下载对应的驱动,最重要的还需要安装对应的 Python Selenium 库,而且版本也得好好看看是否对应,确实不是很方便,另外如果要做大规模部署的话,环境配置的一些问题也是个头疼的事情。
那么本课时我们就介绍另一个类似的替代品,叫作 Pyppeteer。注意,是叫作 Pyppeteer,而不是 Puppeteer。
一、Pyppeteer 介绍
Puppeteer 是 Google 基于 Node.js 开发的一个工具,有了它我们可以通过 JavaScript 来控制 Chrome 浏览器的一些操作,当然也可以用作网络爬虫上,其 API 极其完善,功能非常强大,Selenium 当然同样可以做到。
而 Pyppeteer 又是什么呢?它实际上是 Puppeteer 的 Python 版本的实现,但它不是 Google 开发的,是一位来自于日本的工程师依据 Puppeteer 的一些功能开发出来的非官方版本。
【在 Pyppetter 中,实际上它背后也是有一个类似 Chrome 浏览器的 Chromium 浏览器在执行一些动作进行网页渲染,这里感觉好有意思,还有chromium这样的浏览器】
Pyppeteer 就是依赖于 Chromium 这个浏览器来运行的。那么有了 Pyppeteer 之后,我们就可以免去那些烦琐的环境配置等问题。如果第一次运行的时候,Chromium 浏览器没有安装,那么程序会帮我们自动安装和配置,就免去了烦琐的环境配置等工作。另外 Pyppeteer 是基于 Python 的新特性 async 实现的,所以它的一些执行也支持异步操作,效率相对于 Selenium 来说也提高了。
那么下面就让我们来一起了解下 Pyppeteer 的相关用法吧。
二、安装库
pip3 install pyppeteer
三、快速上手
接下来我们测试基本的页面渲染操作,这里我们选用的网址为:https://spa2.scrape.center/,如图所示
这个网站我们在之前的 Selenium 爬取实战课时中已经分析过了,整个页面是用 JavaScript 渲染出来的,同时一些 Ajax 接口还带有加密参数,所以这个网站的页面我们无法直接使用 requests 来抓取看到的数据,同时我们也不太好直接模拟 Ajax 来获取数据。
所以前面一课时我们介绍了使用 Selenium 爬取的方式,其原理就是模拟浏览器的操作,直接用浏览器把页面渲染出来,然后再直接获取渲染后的结果。同样的原理,用 Pyppeteer 也可以做到。
下面我们用 Pyppeteer 来试试,代码就可以写为如下形式:
import asynciofrom pyppeteer import launchfrom pyquery import PyQuery as pqasync def main():browser = await launch()page = await browser.newPage()await page.goto('https://spa2.scrape.center/')await page.waitForSelector('.item .name')doc = pq(await page.content())names = [item.text() for item in doc('.item .name').items()]print('Names:', names)await browser.close()asyncio.get_event_loop().run_until_complete(main())
Names: ['霸王别姬 - Farewell My Concubine', '这个杀手不太冷 - Léon', '肖申克的救赎 - The Shawshank Redemption', '泰坦尼克号 - Titanic', '罗马假日 - Roman Holiday', '唐伯虎点秋香 - Flirting Scholar', '乱世佳人 - Gone with the Wind', '喜剧之王 - The King of Comedy', '楚门的世界 - The Truman Show', '狮子王 - The Lion King']
先初步看下代码,大体意思是访问了这个网站,然后等待 .item .name 的节点加载出来,随后通过 pyquery 从网页源码中提取了电影的名称并输出,最后关闭 Pyppeteer。
看运行结果,和之前的 Selenium 一样,我们成功模拟加载出来了页面,然后提取到了首页所有电影的名称。
那么这里面的具体过程发生了什么?我们来逐行看下。
-
launch 方法会新建一个 Browser 对象,其执行后最终会得到一个 Browser 对象,然后赋值给 browser。这一步就相当于启动了浏览器。
-
然后 browser 调用 newPage 方法相当于浏览器中新建了一个选项卡,同时新建了一个 Page 对象,这时候新启动了一个选项卡,但是还未访问任何页面,浏览器依然是空白。
-
随后 Page 对象调用了 goto 方法就相当于在浏览器中输入了这个 URL,浏览器跳转到了对应的页面进行加载。
-
Page 对象调用 waitForSelector 方法,传入选择器,那么页面就会等待选择器所对应的节点信息加载出来,如果加载出来了,立即返回,否则会持续等待直到超时。此时如果顺利的话,页面会成功加载出来。
-
页面加载完成之后再调用 content 方法,可以获得当前浏览器页面的源代码,这就是 JavaScript 渲染后的结果。
-
然后进一步的,我们用 pyquery 进行解析并提取页面的电影名称,就得到最终结果了。
另外其他的一些方法如调用 asyncio 的 get_event_loop 等方法的相关操作则属于 Python 异步 async 相关的内容了,你如果不熟悉可以了解下前面所讲的异步相关知识。
相关文章:
【18】爬虫神器 Pyppeteer 的使用
目录 一、Pyppeteer 介绍 二、安装库 三、快速上手 Python爬虫案例 | Scrape Center 在前面我们学习了 Selenium 的基本用法,它功能的确非常强大,但很多时候我们会发现 Selenium 有一些不太方便的地方,比如环境的配置,得安装好…...
封装js方法 构建树结构和扁平化树结构
在JavaScript中,构建树结构和将树结构扁平化是常见的操作。下面我将提供两个方法,一个用于从扁平化的数据中构建树结构,另一个用于将树结构扁平化。 构建树结构 假设我们有一个扁平化的数据列表,每个节点对象包含id和parentId属…...
服务器和数据库哪一个更重要
在当今数字化的时代,服务器和数据库都是构建和运行各种应用系统的关键组成部分,要说哪一个更重要,其实很难简单地给出定论。 服务器就像是一个强大的引擎,为应用程序提供了稳定的运行环境和高效的计算能力。它负责接收和处理来自…...
Nginx 核心功能与 LNMP 架构部署
一、基于授权的访问控制 1.1 功能概述 Nginx 的基于授权的访问控制通过用户名和密码验证机制,限制用户对特定资源的访问。其实现逻辑与 Apache 类似,但配置更简洁,适用于需保护敏感目录或页面的场景(如管理后台)。 …...
Python程序开发,麒麟系统模拟电脑打开文件实现
在Python开发中,模拟电脑打开文件操作(即用默认程序打开文件),可以使用os.system()方法或subprocess模块来执行系统命令。以下是使用os库实现模拟打开文件的代码示例: 使用os.system()方法 import osfile_path &quo…...
打造惊艳的渐变色下划线动画:CSS实现详解
引言:为什么需要动态下划线效果? 在现代网页设计中,微妙的交互效果可以显著提升用户体验。动态下划线特效作为一种常见的视觉反馈方式,不仅能够引导用户注意力,还能为页面增添活力。本文将深入解析如何使用纯CSS实现一…...
gitmodule怎么维护
目录 ci-cd脚本 豆包文档 ci-cd脚本 git submodule init git submodule update cd /var/lib/jenkins/workspace/wvp-server-Dji/wvp-server git checkout Dji2 cd /var/lib/jenkins/workspace/wvp-server-Dji/cloud-sdk git checkout master 豆包文档...
企业战略管理(设计与工程师类)-2-战略规划及管理过程-2-外部环境分析-PESTEL模型实践
PESTEL在AFI框架中的作用 AFI 战略框架(Analyze, Formulate, Implement——哈佛大学商学院的教授 Michael Porter)是企业战略管理中的一个重要理论模型,帮助企业系统性地分析和制定战略。 作为第一阶段Analyze的第一步,PESTEL…...
基于arduino的温湿度传感器应用
温湿度传感器深度解析与多平台开发实战 一、温湿度传感器代码实现(Arduino平台) 1. 基础传感器驱动(DHT11) #include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11DHT dht(DHTPIN, DHTTYPE);void setup() {Serial.begin(9600);dht.begin(); }void loop() {del…...
【AI提示词】机会成本决策分析师
提示说明 具备经济学思维的决策架构师,擅长通过机会成本模型分析复杂选择场景 提示词 # Role: 机会成本决策分析师## Profile - language: 中文 - description: 具备经济学思维的决策架构师,擅长通过机会成本模型分析复杂选择场景 - background: 经济…...
基于Springboot + vue实现的列书单读书平台
项目描述 本系统包含管理员和用户两个角色。 管理员角色: 用户管理:管理系统中所有用户的信息,包括添加、删除和修改用户。 书单信息管理:管理书单信息,包括新增、查看、修改、删除和查看评论。 在线书店管理&…...
「Mac畅玩AIGC与多模态07」开发篇03 - 开发第一个 Agent 插件调用应用
一、概述 本篇介绍如何在 macOS 环境下,基于 Dify 平台自带的网页爬虫插件工具,开发一个可以提取网页内容并作答的 Agent 应用。通过使用内置插件,无需自定义开发,即可实现基本的网页信息提取与智能体回答整合。 二、环境准备 1. 确认本地部署环境 确保以下环境已搭建并…...
Headers池技术在Python爬虫反反爬中的应用
1. 引言 在当今互联网环境中,许多网站都部署了反爬虫机制,以防止数据被大规模抓取。常见的反爬手段包括: User-Agent检测(检查请求头是否来自浏览器)IP频率限制(短时间内同一IP请求过多会被封禁ÿ…...
端到端电力电子建模、仿真与控制及AI推理
在当今世界,电力电子不再仅仅是一个专业的利基领域——它几乎是每一项重大技术变革的支柱。从可再生能源到电动汽车,从工业自动化到航空航天,对电力转换领域创新的需求正以前所未有的速度增长。而这项创新的核心在于一项关键技能:…...
Java云原生+quarkus
一、Java如何实现云原生应用? 传统的 Java 框架(如 Spring Boot)虽然功能强大,但在云原生场景下可能显得笨重。以下是一些更适合云原生的轻量级框架: Quarkus(推荐) 专为云原生和 Kubernetes 设计的 Java 框架。支持…...
在yolo中Ultralytics是什么意思呢?超越分析的智能
在YOLO(You Only Look Once)目标检测框架中,Ultralytics 是一家专注于计算机视觉和机器学习技术的公司,同时也是YOLO系列模型(如YOLOv5、YOLOv8等)的官方开发和维护团队。以下是关键点解析: 1. …...
TRAE历史版本下载参考
https://lf-cdn.trae.com.cn/obj/trae-com-cn/pkg/app/releases/stable/{此处替换为版本号}/win32/Trae%20CN-Setup-x64.exe 比如版本号为1.0.11939 那么链接为https://lf-cdn.trae.com.cn/obj/trae-com-cn/pkg/app/releases/stable/1.0.11939/win32/Trae%20CN-Setup-x64.exe …...
C++类与对象基础
目录 1.取地址运算符重载 2.初始化列表 3.类型转换 既前面所讲的C类与对象知识,C类与对象——基础知识-CSDN博客 C类与对象——构造函数与析构函数-CSDN博客 C类与对象——拷贝构造与运算符重载_c拷贝对象和对象调用同一函数的输出区别怎么实现-CSDN博客本章我们…...
C# 继承详解
继承是面向对象程序设计(OOP)中的核心概念之一,它极大地增强了代码的重用性、扩展性和维护性。本篇文章将详细讲解C#中的继承机制,包括基础概念、语法特法、多重继承(通过接口实现)、继承的规则和实际应用示…...
多源数据整合与数据虚拟化:构建灵活、高效的数据架构
多源数据整合与数据虚拟化:构建灵活、高效的数据架构 引言 随着大数据时代的到来,数据的多样性和复杂性已经成为了企业面临的一大挑战。不同来源的数据在格式、结构以及存储方式上各不相同,传统的单一数据源管理方法难以应对海量且多样化的数据需求。多源数据整合与数据虚拟…...
代码随想录第39天|leetcode198.打家劫舍、leetcode213.打家劫舍II 、leetcode337.打家劫舍III
1.198. 打家劫舍 - 力扣(LeetCode) 当前房屋偷与不偷取决于前一个房屋和前两个房屋是否被偷,所以就可以得到相应的dp数组。 即,dp[i] max(dp[i-2]nums[i],dp[i-1]); int rob(vector<int>& nums) {//dp[i]:…...
C++ 如何计算两个gps 的距离
C 完全可以计算 三维空间中的 WGS84 坐标点之间的精确欧氏距离。关键是: 要先把经纬度 海拔 (lat, lon, alt) 转换成 ECEF(地心地固坐标系),然后计算欧氏距离即可。 ✅ 使用 GeographicLib::Geocentric 实现三维距离计算…...
通过全局交叉注意力机制和距离感知训练从多模态数据中识别桥本氏甲状腺炎|文献速递-深度学习医疗AI最新文献
Title 题目 Hashimoto’s thyroiditis recognition from multi-modal data via globalcross-attention and distance-aware training 通过全局交叉注意力机制和距离感知训练从多模态数据中识别桥本氏甲状腺炎 01 文献速递介绍 桥本氏甲状腺炎(HT)&a…...
网络原理—应用层和数据链路层
IP协议 ⭐IP协议报头上面的知识 地址管理 使用一套地址体系(IP协议),来描述互联网上每个是被所在的位置。 IP数据报的长度(拆包和组包) 可以对CUP进行拆包,可以多个IP报头装一个CUP数据。 8位生存时间(TTL) 这里的时间不是传统意义上的,…...
Cell Res | Stereo-seq揭示人类肝癌浸润区促进肝细胞-肿瘤细胞串扰、局部免疫抑制和肿瘤进展
有同学给了一篇23年的空间文章,研究的一个核心概念是肿瘤边缘的"侵袭区",文章中定义的是以肿瘤边缘为中心的500微米宽的区域,这里是肿瘤细胞侵袭和转移的活跃前沿,包含复杂的细胞成分及独特的分子特征,存在免…...
Mybatis-plus代码生成器的创建使用与详细解释
Mybatis-plus代码生成器的创建使用与详细解释 一、代码生成器概述 1. 定义(什么是代码生成器) 在软件开发过程中,存在大量重复性的代码编写工作,例如实体类、Mapper 接口、Service 接口及实现类等。代码生成器就是为了解决这类问题而诞生的工具。MyBa…...
swagger2升级至openapi3的利器--swagger2openapi
背景: 因为项目需要升级JDK,涉及到swagger2升级至openapi3的情况。由于swagger 2和openapi 3的语法差距太大,需要对yaml进行升级。无奈单个yaml文件的内容太大,高至4万多行,手动进行语法的转换肯定是不可能了ÿ…...
私有云与虚拟化攻防2(OpenStack渗透场景,大部分云平台都是基于此进行二次开发)
虚拟化和私有云的一些区别 虚拟化只是简单资源虚拟化,一虚多私有云除了能够实现虚拟化以外更重要的是服务自助化、自动化什么是Openstack OpenStack是一个开源的云计算管理平台项目,是属于基础设施即服务(IaaS),是一个云操作系统。 Nova(控制 ) 提供计算资源,虚拟机、容…...
前缀和 后缀和 --- 寻找数组的中心下标
题目链接 寻找数组的中心下标 给你一个整数数组 nums ,请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为…...
关于插值和拟合(数学建模实验课)
文章目录 1.总体评价2.具体的课堂题目 1.总体评价 学校可以开设这个数学建模实验课程,我本来是非常的激动地,但是这个最后的上课方式却让我高兴不起哦来,因为老师讲的这个内容非常的简单,而且一个上午的数学实验,基本…...
深入学习解读:《数据安全技术 数据分类分级规则》【附全文阅读】
该文详细阐述了数据安全技术的数据分类分级规则,内容分为基本原则、数据分类规则、数据分级规则及数据分类分级流程四大部分。 基本原则强调科学实用、动态更新、就高从严及53原则(虽表述不清,但可理解为多重原则的结合),同时要求边界清晰、点面结合。 数据分类规…...
Windows环境下用pyinstaller将python脚本编译为exe文件
下载 https://pypi.org/project/pyinstaller/#filespyinstaller-6.13.0-py3-none-win_arm64.whl 安装 cmd命令行中执行:pip install pyinstaller-6.13.0-py3-none-win_amd64.whl得先安装pythonpip若找不到命令,需要加到环境变量 测试 pyinstaller --ve…...
每日算法-250429
每日 LeetCode 题解 (2025-04-29) 大家好!这是今天的 LeetCode 刷题记录,主要涉及几道可以使用贪心策略解决的问题。 2037. 使每位学生都有座位的最少移动次数 题目描述: 思路 贪心 解题过程 要使总移动次数最少,直观的想法是让每个学生…...
Go语言Context机制深度解析:从原理到实践
一、Context概述 Context(上下文)是Go语言并发编程的核心机制之一,主要用于在goroutine之间传递取消信号、截止时间和其他请求范围的值。Google在Go 1.7版本中将其引入标准库,现已成为处理并发控制和超时的标准方案。 核心作用 …...
大数据学习(115)-hive与impala
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…...
php学习笔记(全面且适合新手)
以下是专为 PHP 7.4 初学者设计的全面学习文档,涵盖基础语法、细节语法和进阶语法,结合 PHP 7.4 新特性与实战案例,帮助系统掌握 PHP 开发: 为什么特地做7.4的笔记而不做8的?因为公司用的7.4,哈哈 一、基…...
Nginx核心功能
目录 一:基于授权的访问控制 1:基于授权的访问控制简介 2:基于授权的访问控制步骤 (1)使用htpasswd 生成用户认证文件 (2)修改密码文件权限为400,将所有者改为nginx,…...
基于Spring Boot 电商书城平台系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
流量控制机制
基于信用(credit-based)的流量控制机制 在基于信用的流量控制中,每个下游路由器都维护了一个信用计数器,用于跟踪其可用的缓冲空间。当一个数据包(或者说flit)被成功接收后,下游路由器会向上游…...
ImageDataGenerator ()用法简介
ImageDataGenerator 是 Keras 中用于图像数据增强和预处理的工具。它允许你实时生成增强的图像数据,这在训练深度学习模型时特别有用,因为它可以帮助提高模型的泛化能力。 以下是 ImageDataGenerator 的一些常见用法和参数: 基本用法 导入模块 from keras.preprocessi…...
【Linux】服务自启动设置的方式
关于服务自启动设置的方式,本文将介绍两种方法。分别是systemd服务单元文件的配置和起容器的方式。 目录 1 systemd服务单元文件的配置 [Unit] 部分 [Service] 部分 [Install] 部分 2 docker 1 systemd...
Wi-SUN与LoRa和NB-IoT通信技术的对比
LoRa和NB-IoT也都是LPWAN(低功耗广域网)的一种,不同的是他们分处在不同的频段。分为授权频段和非授权频段。(NB-IoT)其采用现有的3G、4G网络,需要通过电信运营商申请才可以使用。使用非授权频段的技术主要为…...
科研入门规划
作为研0学生,建议采取 “边打基础边探索,逐步深入” 的策略。 📌 阶段一:先建立基础框架(前1-3个月) 1. 快速搭建知识框架 目标:了解领域全貌,明…...
《P3143 [USACO16OPEN] Diamond Collector S》
题目描述 奶牛 Bessie 一直喜欢闪闪发光的物体,她最近在业余时间开始了一项爱好——挖掘钻石!她收集了 N 颗大小各不相同的钻石(N≤50,000),并希望将它们中的一部分放在谷仓里的两个展示柜中展示。 由于 Bessie 希望…...
纯C协程框架NtyCo
原文是由写的,写的真的很好,原文链接:纯c协程框架NtyCo实现与原理-CSDN博客 1.为什么会有协程,协程解决了什么问题? 网络IO优化 在CS,BS的开发模式下,服务器的吞吐量是一个受关注的参数&#x…...
16、路由守卫:设置魔法结界——React 19 React Router
一、魔法结界的本质 "路由守卫是霍格沃茨城堡的隐身斗篷,在时空裂隙中精准控制维度跃迁!" 魔法部交通司官员挥舞魔杖,React Router 的嵌套路由在空中交织成星轨矩阵。 ——基于《国际魔法联合会》第7号时空协议,路由守…...
try catch + throw
异常 java语言中将,将程序执行中发生的不正常情况称为“异常”。(1)Error;JVM系统内部错误,资源耗尽严重。(2)Execption:运行时异常,编译时异常。 异常体系图 异常处理…...
【东枫电子】AI-RAN:利用人工智能驱动的计算基础设施变革 RAN
太原市东枫电子科技有限公司,翻译 文章目录 摘要一、引言二、AI-RAN 的用例三、AI-RAN 的需求与赋能因素四、参考架构设计五、AI-RAN 概念验证六、结论与未来工作REFERENCES 摘要 无线接入网络 (RAN) 格局正在经历从传统的以通信为中心的基础设施向融合计算通信平台…...
【Linux】第十四章 提高命令行效率
1. #!/bin/bash 是什么意思? #!/bin/bash 出现在 shell 脚本第一行的开头,意味着使用bash shell 命令解释器来执行脚本。 2. PATH变量有什么重要作用? PATH 的作用是告诉操作系统在哪些目录下寻找需要运行命令程序,从而不需要输…...
Lucene中不同搜索类型的使用方法、基本概念、应用场景、差异对比,并通过表格进行总结
为了详细说明Lucene中不同搜索类型的使用方法、差异对比,并通过表格进行总结,我们首先需要理解每种搜索类型的基本概念和应用场景。以下是针对每种搜索类型的简要说明、差异对比以及最终的表格总结。 1. 多字段搜索(MultiFieldQueryParser&am…...