Playwright从入门到实战:比Selenium更快的数据爬取案例实战

news2025/3/31 23:12:29
摘要

Playwright 是微软开源的下一代浏览器自动化工具,凭借其高性能、跨浏览器支持和现代化设计,迅速成为 Web 自动化领域的热门选择。本文将从 安装配置 开始,通过 实战演练 展示其核心功能,并与 Selenium 深度对比,帮助开发者选择适合的工具。

在这里插入图片描述

一、Playwright 基础前置知识

1. 什么是 Playwright?

Playwright 是一个支持 Chromium、Firefox、WebKit 的浏览器自动化工具,提供统一的 API 控制不同浏览器,适用于网页爬虫、自动化测试、数据采集等场景。

2. 安装前的准备
  • Python 环境:确保已安装 Python 3.7+,并配置好环境变量(参考 Python 官方安装指南)。
  • 权限问题:若在 Windows 系统中遇到权限错误,建议以管理员身份运行 PowerShell。
3. 安装 Playwright
# 安装 Python 库
pip install playwright

# 下载浏览器驱动(自动执行)
python -m playwright install
  • 验证安装:

    from playwright.sync_api import sync_playwright
    with sync_playwright() as p:
        print(p.chromium.version)  # 输出 Chromium 版本号
    

二、Playwright 实战演练:爬取电商网站数据

1. 示例场景

访问电商网站(示例使用 https://books.toscrape.com/),搜索书籍并提取价格信息。

2. 完整代码
from playwright.sync_api import sync_playwright

def scrape_books():
    with sync_playwright() as p:
        # 启动浏览器(支持无头模式)
        browser = p.chromium.launch(headless=False)
        page = browser.new_page()

        try:
            # 访问目标页面
            page.goto("https://books.toscrape.com/", timeout=30000)

            # 搜索书籍
            search_box = page.locator('input[name="q"]')
            search_box.fill("Python编程")
            search_box.press("Enter")

            # 等待结果加载
            page.wait_for_selector(".product_pod", state="visible")

            # 提取数据
            books = page.locator_all(".product_pod")
            for book in books:
                title = book.locator("h3 a").inner_text()
                price = book.locator(".price_color").inner_text()
                print(f"书名: {title}, 价格: {price}")

            # 截图保存
            page.screenshot(path="search_results.png")

        except Exception as e:
            print(f"操作失败: {e}")
        finally:
            browser.close()

if __name__ == "__main__":
    scrape_books()
3. 代码解析
  • 智能等待page.wait_for_selector() 自动处理页面加载延迟。
  • 异常处理try-except-finally 结构提升脚本健壮性。
  • 元素定位:通过 CSS 选择器精准定位元素(如输入框、商品卡片)。

三、Playwright vs Selenium:深度对比

1. 核心差异总结
维度PlaywrightSelenium
启动速度更快(直接通过 CDP 连接)。较慢(需启动独立浏览器进程)。
元素等待智能自动等待,减少代码量。需手动添加显式/隐式等待。
跨浏览器支持原生支持 Chromium/Firefox/WebKit。需下载不同驱动(如 ChromeDriver)。
弹窗处理内置处理 iframe、弹窗、页面跳转。需手动切换上下文(如 driver.switch_to.alert)。
移动端模拟内置设备模拟(如 iPhone、Android)。需手动设置 User-Agent 和视口。
网络拦截支持请求拦截与修改(如 page.route())。需依赖插件或代理(如 BrowserMob)。
2. 适用场景推荐
  • 选择 Playwright:

    • 需要处理动态加载、弹窗等复杂交互。
    • 要求跨浏览器测试统一性。
    • 追求最新特性(如视口缩放、设备模拟)。
  • 选择 Selenium:

    • 维护老旧项目(如兼容 IE 11)。
    • 依赖现有 Selenium 生态(如云测试平台)。

四、Playwright 高级技巧

1. 多标签页操作
with browser.new_page() as new_page:
    new_page.goto("https://example.com")
    print(new_page.title())
2. 拦截网络请求
def handle_route(route):
    if "ads" in route.url:
        route.abort()  # 屏蔽广告请求

page.route("**/*", handle_route)
3. 无头模式与有头模式切换
browser = p.chromium.launch(headless=True)  # 无界面模式(默认)
browser = p.chromium.launch(headless=False) # 显示浏览器界面(调试模式)

五、总结与建议

1. Playwright 的优势
  • 高效稳定:自动处理异步加载,减少脚本维护成本。
  • 功能全面:内置截图、录屏、网络拦截等实用工具。
  • 未来趋势:微软持续更新,社区生态快速成长。
2. 如何选择工具?
  • 新项目优先选 Playwright:覆盖现代 Web 应用需求。
  • 旧系统兼容选 Selenium:解决 IE 11 等遗留问题。
3. 注意事项
  • 合法合规:遵守目标网站的 robots.txt 协议。
  • 反爬策略:合理设置请求频率,避免触发封禁。

通过本文,您已掌握 Playwright 的基础用法、实战技巧及与 Selenium 的差异。无论是网页爬虫还是自动化测试,Playwright 都能提供高效可靠的解决方案。立即尝试并探索其更多可能性吧!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day1_Flink基础

文章目录 Flink基础今日课程内容目标为什么要学Flink技术更新迭代市场需求 流式计算批量计算概念特点 批量计算的优势和弊端流式计算生活中流场景流式计算的概念 Flink简介Flink历史Flink介绍 Flink架构体系已学过的框架技术Flink架构 Flink集群搭建Flink的集群模式Standalone模…

使用FastExcel时的单个和批量插入的问题

在我们用excel表进行插入导出的时候,通常使用easyexcel或者FastExcel,而fastexcel是easy的升级版本,今天我们就对使用FastExcel时往数据库插入数据的业务场景做出一个详细的剖析 场景1 现在我们数据库有一张组织表,组织表的字段…

交换技术综合实验

一、实验拓扑 二、实验要求 内网IP地址使用172.16.0.0/16分配。 SW1和SW2之间互为备份。 VRRP/STP/VLAN/Eth-trunk均使用。 所有PC通过DHCP获取IP地址。 ISP只能配置IP地址。 所有电脑可以正常访问ISP路由器。 三、实验步骤 基于172.16.0.0/16进行划分 172.16.2.0/24&…

记录Jmeter 利用BeanShell 脚本解析JSON字符串

下载org.json包(文档说明) #下载地址 https://www.json.org/ # github 地址 https://github.com/stleary/JSON-java # api 文档说明 https://resources.arcgis.com/en/help/arcobjects-java/api/arcobjects/com/esri/arcgis/server/json/JSONObject.htmlBeanShell脚本 import…

深入解析音频:格式、同步及封装容器

物理音频和数字音频 物理音频 定义:物理音频就是声音在自然界中的物理表现形式,本质上是一种机械波,通过空气或其他介质传播。例如,当我们说话、乐器演奏或物体碰撞时,都会产生振动,这些振动会引起周围介…

RPCGC阅读

24年的MM 创新 现有点云压缩工作主要集中在保真度优化上。 而在实际应用中,压缩的目的是促进机器分析。例如,在自动驾驶中,有损压缩会显着丢失户外场景的详细信息。在三维重建中,压缩过程也会导致场景数据中语义信息(Contour)的…

医疗CMS高效管理:简化更新维护流程

内容概要 医疗行业内容管理系统(CMS)的核心价值在于应对医疗信息管理的多维复杂性。面对诊疗指南的动态更新、科研数据的快速迭代以及多机构协作需求,传统管理模式往往面临效率瓶颈与合规风险。现代化医疗CMS通过构建结构化权限管理矩阵&…

《Spring Cloud Eureka 高可用集群实战:从零构建高可靠性的微服务注册中心》

从零构建高可用 Eureka 集群 | Spring Cloud 微服务架构深度实践指南 本文核心内容基于《Spring Cloud 微服务架构开发》第1版整理,结合生产级实践经验优化 实验环境:IntelliJ IDEA 2024 | JDK 1.8| Spring Boot 2.1.7.RELEASE | Spring Cloud Greenwich…

DSP+AI综合应用案例1——三种波形识别(预告)

采用1kHz采样率,识别方波、正弦波、三角波三种波形,算法采用傅里叶变换与神经网络,识别结果如下: 可以达到1ms内实现检测,逐渐完善到CanMV K230 或MCU中,待续

去噪算法大比拼

目录 效果图: 实现代码: 密集抖动 pip install pykalman 效果图: 实现代码: import numpy as np import cv2 import matplotlib.pyplot as plt from scipy.ndimage import gaussian_filter1d from scipy.signal import butter, filtfilt, savgol_filter from pykalma…

浅拷贝或深拷贝js数组或对象的方法

在js中,直接通过赋值操作拷贝数组,会导致新旧数组互相影响。 这是因为数组、对象等数据属于引用类型(Reference Type)数据。对引用类型数据进行赋值操作时,实际上拷贝的是其内存地址的引用(即指向堆内存中对…

CKS认证 | Day3 K8s容器运行环境安全加固

一、最小特权原则(POLP) 1)最小特权原则 (Principle of least privilege,POLP) : 是一种信息安全概念,即为用户提供执行其工作职责所需的最 小权限等级或许可。 最小特权原则被广泛认为是网络安全的最佳实…

28_跨域

目录 promise promise的基本语法 async await try catch promise 静态方法 跨域 跨域的解决方案 1-cors ​编辑 2-jsonp方案 3-代理服务器 promise promise 是一个es6新增的语法 承诺的意思 作用:是专门用来解决回调地狱!!!! promise的基本语法 // 基本语法:// Pr…

Stable Diffusion太慢?国内Midjourney平替方案—商用合规部署

一、AI绘画商用核心痛点(为什么需要替代Stable Diffusion/Midjourney?) 1. 速度慢,高并发支持差 Stable Diffusion:单卡GPU生成1张图需3-10秒,并发超过10任务易崩溃Midjourney:排队制&#xf…

综述速读|086.04.24.Retrieval-Augmented Generation for AI-Generated Content A Survey

论文题目:Retrieval-Augmented Generation for AI-Generated Content: A Survey 论文地址:https://arxiv.org/abs/2402.19473 bib引用: misc{zhao2024retrievalaugmentedgenerationaigeneratedcontent,title{Retrieval-Augmented Generation…

JavaScript中的Math对象和随机数

目录 一、常用数学方法 1. 数值处理 2. 极值与运算 3. 三角函数(参数为弧度) 4. 对数与指数 5. 常量 二、随机数生成 Math.random() 1. 基础范围控制 2. 整数随机数 三、实际应用场景 1. 随机颜色生成 2. 数组随机排序 3. 概率控制 四、注…

lxd-dashboard 图形管理LXD/LXC

前言 LXD-WEBGUI是一个完全用AngularJS编写的Web应用程序,无需应用服务器、数据库或其他后端服务支持。只需要简单地托管静态HTML和JavaScript文件,就能立即投入使用。这个项目目前处于测试阶段,提供了直观的用户界面,帮助用户便捷地管理和控制LXD实例。 安装lxd-dashboa…

python纯终端实现图片查看器(全彩)(windows)

很多人作为命令行爱好者,无法在终端内直接查看图片是无法忍受的, 那就写一个! 先直接上代码 import os import sys from PIL import Image import numpy as np import colorama import msvcrt # Windows专用# 初始化colorama colorama.ini…

【动态规划篇】- 路径问题

62. 不同路径 题目链接: 62. 不同路径 题目解析: 状态表示 dp[i][j]表示:以[i][j]为终点时,一共有多少种路径。 状态转移方程 以[i][j]最近的几步来分析问题,要么从[i-1][j]位置向下走一步到达[i][j],要么从[i][j-1…

《新凯来:半导体设备制造领域的“国家队”》

《新凯来:半导体设备制造领域的“国家队”》 一、SEMICON China 爆火出圈:31 款设备背后的 “深圳力量” 1.1 展会现象级热度 在 2025 年 SEMICON China 展会现场,新凯来展台成了整届展会当之无愧的 “顶流”,被来自全球各地的专…