最简单的自动化爬虫工具--Playwright

devtools/2024/9/25 2:31:37/

Playwright

Playwright是一款强大的自动化库,提供了一种简便易用、高性能的网页自动化解决方案。它支持同步和异步两种操作方式,用户无需为不同浏览器单独下载驱动程序,因为Playwright内置了对Chrome、Firefox、Safari等多种浏览器的支持。此外,Playwright引入了上下文(context)的概念,使得多个页面和浏览器实例的管理变得更加灵活。它支持无头模式运行,可以在后台静默执行,同时,运行脚本时还能开启开发者工具,便于调试。在元素定位上,Playwright允许使用传统的选择器,同时也提供了自己的定位机制和自定义定位方式。与Selenium相比,Playwright的启动和执行速度更快,它基于WebSocket实现了双向通信,而Selenium则是基于HTTP的单向通信。Playwright还提供了自动等待功能,简化了等待逻辑的处理。在操作上,Playwright提供了便捷的多页面切换功能,无需使用iframe,使得页面操作更加直观。对于不熟悉的方法或类,用户可以通过录制功能来了解其使用过程。Playwright的回放效率高,适合进行回归测试。其底层的高可用性和稳定性意味着用户可能不需要进行额外的二次封装。最后,Playwright支持多种编程语言,包括Python、Java、JavaScript和C#,满足了不同用户的需求。

简单来说,Playwright比Selenium更容易安装和使用,并且效率性能更高,支持更多的浏览器。首先使用Playwright库,请进行安装,命令如下。

pip install playwright

然后运行以下代码,playwright就会自动进行浏览器驱动下载和配置,比selenium更智能,配置过程非常简单。

注意:驱动下载速度比较慢,请耐心等待,若想加快速度,可尝试替换下载源。请找到/site-packages/playwright/driver/package/lib/server/registry/index.js文件,然后将constPLAYWRIGHT_CDN_MIRRORS变量中的3个值都改成国内的镜像就可以,如填入
https://registry.npmmirror.com/-/binary/playwright。

当全部驱动下载完毕后,便可以启动脚本录制,这样就能够一边操作网站,程序会自动记录操作过程,生成代码,大大提高编写脚本的效率,减少寻找数据定位的时间。启动脚本录制命令如下。

playwright codegen --target python -o gz_scrapy.py https://data.gz.gov.cn/

通过命令启动了一个脚本录制程序和一个浏览器,并且已经打开了广州政府数据开放平台。
在这里插入图片描述
在搜索框输入”广州市人口规模及分布情况“,然后进入数据集,再选择文件下载,下载一个csv的文件,最后关闭录制,便可以看到gz_scrapy.py脚本已经编写完成。然后增加下载文件的复制保存功能,就完成脚本程序,整个过程非常简单便捷,完整代码如下。

python">from playwright.sync_api import Playwright, sync_playwright, expect
import shutil
import osdef run(playwright: Playwright) -> None:browser = playwright.chromium.launch(headless=False)context = browser.new_context()page = context.new_page()page.goto("https://data.gz.gov.cn/")page.get_by_role("textbox").click()page.get_by_role("textbox").fill("广州市人口规模及分布情况")page.get_by_label("摁下回车键进行网站内容搜索").click()with page.expect_popup() as page1_info:page.get_by_role("link", name="广州市人口规模及分布情况", exact=True).click()page1 = page1_info.valuepage1.get_by_text("文件下载").click()with page1.expect_download() as download_info:page1.get_by_role("link", name="广州市人口规模及分布情况.csv_csv.zip 2023").click()download = download_info.value# 以上是录制好的脚本,下面增加保存文件的代码download_path = download.path()print(f"完成下载,临时存储: {download_path}")# 定义保存文件的路径save_path = "广州市人口规模及分布情况.csv"# 复制下载的文件到保存路径shutil.copy(download_path, save_path)# 检查文件是否已保存if os.path.exists(save_path):print(f"文件保存成功,保存到: {save_path}")else:print("文档保存失败")# ---------------------context.close()browser.close()

运行代码,能够直观感受到脚本启动和打开浏览器的速度比selenium快速。若把浏览器设置了不显示,执行速度会更快,只需要修改一行代码,把headless参数变成True,代码如下。

python">browser = playwright.chromium.launch(headless=True)

通过脚本录制,能够快速完成了自动下载“广州市人口规模及分布情况”的数据文件脚本。


http://www.ppmy.cn/devtools/38979.html

相关文章

等保测评—Linux-CentOS标准范例截图

密码输入错误无法登录 用户账户情况包含root、guanli、shenji 查看审计用户权限 身份鉴别: cat /etc/passwd,核查用户名和 UID,是否存在同样的用户名和 UID cat /etc/shadow,查看文件中各用户名状态 , 核查密码一栏为…

搜索算法系列之三(插值查找)

前言 插值查找仅适用于有序数据、有序数组,和二分查找类似,更讲究数据有序均匀分布。 算法原理 插值查找(interpolation search)是一种查找算法,它与二分查找类似,但在寻找元素时更加智能化。这种算法假设数据集是等距的或者有…

用 C 语言进行大模型推理:探索 llama2.c 仓库(二)

文章目录 前提如何构建一个Transformer Model模型定义模型初始化 如何构建tokenzier 和 sampler如何进行推理总结 前提 上一节我们介绍了llama2.c中如何对hugging face的权重进行处理,拿到了llama2.c想要的权重格式和tokenizer.bin格式。这一节我们分析下在llama2.…

华为eNSP学习—IP编址

IP编址 IP编址子网划分例题展示第一步:机房1的子网划分第二步:机房2的子网划分第三步:机房3的子网划分IP编址 明确:IPv4地址长度32bit,点分十进制的形式 ip地址构成=网络位+主机位 子网掩码区分网络位和主机位 学此篇基础: ①学会十进制与二进制转换 ②学会区分网络位和…

elementUi中的el-table合计行添加点击事件

elementUi 文档中,合计行并没有点击事件,这里自己实现了合计行的点击事件。 created() {this.propertyList [{ property: order, label: 序号 },{ property: deptName, label: 单位名称 },{ property: contentPublishQuantity, label: 文章数量 },{ pro…

Nanopc T4 使用OpenCV

识别长方形: import cv2 import cv2 as cv import time import platform import os# 获取操作系统类型 os_type platform.system() if os_type "Windows":# Windows系统cap cv.VideoCapture(0) # 使用第零个摄像头 elif os_type "Linux"…

数据结构之单链表之环形链表

1.题目 题目:给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 2.分析 首先,我们应该判断链表是否有环,这个可以根据我的上一篇文章的快慢指针来判断。 bool hasCycle(stru…

现货黄金今日行情分析:昨日高低点法

进行交易之前,投资者要对现货黄金今日行情进行一波分析,我们交易决策应该建立在合理分析的基础之上。那么打开市场交易软件看到现货黄金今日行情之后,该如何着手进行分析呢?下面我们就来讨论一下具体的方法。 要进行现货黄金今日行…