!https://pic2.zhimg/v2-326357efbfd6c494c732ae10ed2d3a83_1440w.jpg
官方文档地址:http://g1879.gitee.io/drissionpagedocs/
✨️ 概述
DrissionPage 是一个基于 Python
的强大网页自动化工具,融合了浏览器控制与数据包收发的功能。它不仅能提供浏览器自动化的便利性,还能实现 requests
的高效性,将两者完美结合。该工具功能丰富,内置众多人性化设计和便捷功能,语法简洁优雅,代码量少,非常适合新手使用。
最新版本:3.2.26
支持系统:Windows、Linux、Mac
python 版本:3.6 及以上
支持应用:Chromium 内核浏览器(如 Chrome、Edge),electron 应用
背景
使用 requests 进行数据采集时,对于需要登录的网站,通常需要分析数据包、JavaScript 源码,并构造复杂的请求。此外,还需处理验证码、JS 混淆和签名参数等反爬手段,这使得门槛较高,开发效率较低。尽管使用浏览器可以绕过许多这些问题,但浏览器的运行效率通常不高。
DrissionPage 的设计初衷就是将浏览器和 requests 的优势结合起来,实现“写得快”和“跑得快”。这个库允许用户在不同需求下切换相应模式,并提供人性化的使用方法,提高开发和运行效率。除了融合两者的优点,本库还封装了常用功能,以网页为单位提供简便的操作和语句,减少用户需要关注的细节,使其能够专注于功能实现。通过简单的方法实现强大的功能,让代码更加优雅。
以前的版本是基于对 selenium 的重新封装实现的。从 3.0 版本开始,作者重新开发了底层代码,摆脱了对 selenium 的依赖,增强了功能,并提升了运行效率。
理念
简洁!易用 !方便!
☀️ 特性
作者经过长期实践,踩过无数坑,总结出的经验全写到这个库里了。
强大的自研内核
本库采用全自研的内核,集成了大量实用功能,并对常用功能进行了整合和优化。与 selenium 相比,具有以下优点:
- 没有 webdriver 特征。
- 无需为不同版本的浏览器下载不同的驱动程序。
- 运行速度更快。
- 可以跨 iframe 查找元素,无需反复切换。
- 将 iframe 视作普通元素,获取后可以直接在其中查找元素,逻辑更清晰。
- 可以同时操作浏览器中的多个标签页,即使标签页为非激活状态,无需切换。
- 可以直接读取浏览器缓存保存图片,无需 GUI 点击另存。
- 能对整个网页截图,包括视口之外的部分(支持 90 版本以上的浏览器)。
- 可以处理非 open 状态的 shadow-root。
亮点功能
除了上述优点外,本库还拥有众多贴心设计。
- 极简的语法规则,集成大量常用功能,使代码更加优雅。
- 元素定位更加简单,功能更加强大且稳定。
- 无处不在的等待和自动重试功能,使网络不稳定性变得易于控制,程序更稳定,开发更加省心。
- 强大的下载工具,即使在操作浏览器时也能享受快捷可靠的下载体验。
- 允许反复使用已打开的浏览器,无需每次运行从头启动浏览器,极大方便调试。
- 使用 ini 文件保存常用配置,自动调用,提供便捷设置,避免繁琐的配置项。
- 内置 lxml 解析引擎,解析速度大幅提升。
- 使用 POM 模式封装,可直接用于测试,便于扩展。
- 高度集成的便利功能,从每个细节体现用户友好。
简单的示例举例
✅️️安装这两个库。
pip install DrissionPage DataRecorder
✅️️ DrissionPage 基本用法。
from DrissionPage import ChromiumPage
# 创建 ChromiumPage 对象,用于浏览器自动化
browser_page = ChromiumPage()
# 访问一个网页
browser_page.get('https://www.example')
# 查找并获取网页标题
title = browser_page.title
print(f"Page title: {title}")
# 查找并获取某个元素的文本
[element_text](https://zhida.zhihu.com/search?content_id=245741093&content_type=Article&match_order=1&q=element_text&zhida_source=entity) = browser_page('css selector or xpath').text
print(f"Element text: {element_text}")
# 点击一个按钮
browser_page('button selector').click()
# 关闭浏览器
browser_page.close()
✅️️ Recorder 基本用法。
from DataRecorder import Recorder
# 创建 Recorder 对象,指定文件名
data_recorder = Recorder('data.csv')
# 添加数据
data_recorder.add_data(('Column1', 'Column2', 'Column3'))
data_recorder.add_data(('Data1', 'Data2', 'Data3'))
# 保存数据到文件
data_recorder.record()
✅️️ 结合 DrissionPage 和 Recorder 进行数据采集。
from DrissionPage import ChromiumPage
from DataRecorder import Recorder
# 创建 ChromiumPage 对象,用于浏览器自动化
browser_page = ChromiumPage()
# 创建 Recorder 对象,用于记录数据
data_recorder = Recorder('movies.csv')
# 访问目标网页
browser_page.get('https://www.maoyan/board/4')
while True:
# 遍历页面上所有 dd 元素,获取电影信息
for movie in browser_page.eles('t:dd'):
# 获取需要的信息
rank_number = movie('t:i').text # 排名
movie_score = movie('.score').text # 评分
movie_title = movie('@data-act=boarditem-click').attr('title') # 电影标题
movie_star = movie('.star').text # 主演
release_time = movie('.releasetime').text # 上映时间
# 将获取的信息写入到记录器
data_recorder.add_data((rank_number, movie_title, movie_star, release_time, movie_score))
# 获取下一页按钮,如果存在则点击
next_button = browser_page('下一页', timeout=2)
if next_button:
next_button.click()
browser_page.wait.load_start()
# 如果不存在下一页按钮,则退出循环
else:
break
# 保存记录的数据到文件
data_recorder.record()
应用实例 : 采集猫眼电影 TOP100 榜
这个示例演示用浏览器采集数据。
✅️️ 采集目标 目标网址:https://www.maoyan/board/4
采集目标:排名、电影名称、演员、上映时间、分数
✅️️ 编码思路 按F12,可以看到每个电影信息都包含在
- 元素中,因此可批量获取
- 元素,遍历它们并再从其中获取每个电影的信息。
✅️️ 示例代码 以下代码可直接运行。
须要注意的是,这里用到记录器对象,详见DataRecorder。
from DrissionPage import ChromiumPage
from DataRecorder import Recorder
# 创建 ChromiumPage 对象,用于浏览器自动化
browser_page = ChromiumPage()
# 创建 Recorder 对象,用于记录数据
data_recorder = Recorder('data.csv')
# 访问目标网页
browser_page.get('https://www.maoyan/board/4')
while True:
# 遍历页面上所有 dd 元素,获取电影信息
for movie in browser_page.eles('t:dd'):
# 获取需要的信息
rank_number = movie('t:i').text # 排名
movie_score = movie('.score').text # 评分
movie_title = movie('@data-act=boarditem-click').attr('title') # 电影标题
movie_star = movie('.star').text # 主演
release_time = movie('.releasetime').text # 上映时间
# 将获取的信息写入到记录器
data_recorder.add_data((rank_number, movie_title, movie_star, release_time, movie_score))
# 获取下一页按钮,如果存在则点击
next_button = browser_page('下一页', timeout=2)
if next_button:
next_button.click()
browser_page.wait.load_start()
# 如果不存在下一页按钮,则退出循环
else:
break
# 保存记录的数据到文件
data_recorder.record()
✅️️ 结果 程序生成一个结果文件 data.csv,内容如下:
1,我不是药神,“主演:徐峥,周一围,王传君”,上映时间:2018-07-05,9.6
2,肖申克的救赎,“主演:蒂姆·罗宾斯,摩根·弗里曼,鲍勃·冈顿”,上映时间:1994-09-10(加拿大),9.5
3,海上钢琴师,“主演:蒂姆·罗斯,比尔·努恩 ,克兰伦斯·威廉姆斯三世”,上映时间:2019-11-15,9.3
4,绿皮书,“主演:维果·莫腾森,马赫沙拉·阿里,琳达·卡德里尼”,上映时间:2019-03-01,9.5
5,霸王别姬,“主演:张国荣,张丰毅,巩俐”,上映时间:1993-07-26,9.4
下面省略。。。
!https://pic2.zhimg/v2-326357efbfd6c494c732ae10ed2d3a83_1440w.jpg
官方文档地址:http://g1879.gitee.io/drissionpagedocs/
✨️ 概述
DrissionPage 是一个基于 Python
的强大网页自动化工具,融合了浏览器控制与数据包收发的功能。它不仅能提供浏览器自动化的便利性,还能实现 requests
的高效性,将两者完美结合。该工具功能丰富,内置众多人性化设计和便捷功能,语法简洁优雅,代码量少,非常适合新手使用。
最新版本:3.2.26
支持系统:Windows、Linux、Mac
python 版本:3.6 及以上
支持应用:Chromium 内核浏览器(如 Chrome、Edge),electron 应用
背景
使用 requests 进行数据采集时,对于需要登录的网站,通常需要分析数据包、JavaScript 源码,并构造复杂的请求。此外,还需处理验证码、JS 混淆和签名参数等反爬手段,这使得门槛较高,开发效率较低。尽管使用浏览器可以绕过许多这些问题,但浏览器的运行效率通常不高。
DrissionPage 的设计初衷就是将浏览器和 requests 的优势结合起来,实现“写得快”和“跑得快”。这个库允许用户在不同需求下切换相应模式,并提供人性化的使用方法,提高开发和运行效率。除了融合两者的优点,本库还封装了常用功能,以网页为单位提供简便的操作和语句,减少用户需要关注的细节,使其能够专注于功能实现。通过简单的方法实现强大的功能,让代码更加优雅。
以前的版本是基于对 selenium 的重新封装实现的。从 3.0 版本开始,作者重新开发了底层代码,摆脱了对 selenium 的依赖,增强了功能,并提升了运行效率。
理念
简洁!易用 !方便!
☀️ 特性
作者经过长期实践,踩过无数坑,总结出的经验全写到这个库里了。
强大的自研内核
本库采用全自研的内核,集成了大量实用功能,并对常用功能进行了整合和优化。与 selenium 相比,具有以下优点:
- 没有 webdriver 特征。
- 无需为不同版本的浏览器下载不同的驱动程序。
- 运行速度更快。
- 可以跨 iframe 查找元素,无需反复切换。
- 将 iframe 视作普通元素,获取后可以直接在其中查找元素,逻辑更清晰。
- 可以同时操作浏览器中的多个标签页,即使标签页为非激活状态,无需切换。
- 可以直接读取浏览器缓存保存图片,无需 GUI 点击另存。
- 能对整个网页截图,包括视口之外的部分(支持 90 版本以上的浏览器)。
- 可以处理非 open 状态的 shadow-root。
亮点功能
除了上述优点外,本库还拥有众多贴心设计。
- 极简的语法规则,集成大量常用功能,使代码更加优雅。
- 元素定位更加简单,功能更加强大且稳定。
- 无处不在的等待和自动重试功能,使网络不稳定性变得易于控制,程序更稳定,开发更加省心。
- 强大的下载工具,即使在操作浏览器时也能享受快捷可靠的下载体验。
- 允许反复使用已打开的浏览器,无需每次运行从头启动浏览器,极大方便调试。
- 使用 ini 文件保存常用配置,自动调用,提供便捷设置,避免繁琐的配置项。
- 内置 lxml 解析引擎,解析速度大幅提升。
- 使用 POM 模式封装,可直接用于测试,便于扩展。
- 高度集成的便利功能,从每个细节体现用户友好。
简单的示例举例
✅️️安装这两个库。
pip install DrissionPage DataRecorder
✅️️ DrissionPage 基本用法。
from DrissionPage import ChromiumPage
# 创建 ChromiumPage 对象,用于浏览器自动化
browser_page = ChromiumPage()
# 访问一个网页
browser_page.get('https://www.example')
# 查找并获取网页标题
title = browser_page.title
print(f"Page title: {title}")
# 查找并获取某个元素的文本
[element_text](https://zhida.zhihu.com/search?content_id=245741093&content_type=Article&match_order=1&q=element_text&zhida_source=entity) = browser_page('css selector or xpath').text
print(f"Element text: {element_text}")
# 点击一个按钮
browser_page('button selector').click()
# 关闭浏览器
browser_page.close()
✅️️ Recorder 基本用法。
from DataRecorder import Recorder
# 创建 Recorder 对象,指定文件名
data_recorder = Recorder('data.csv')
# 添加数据
data_recorder.add_data(('Column1', 'Column2', 'Column3'))
data_recorder.add_data(('Data1', 'Data2', 'Data3'))
# 保存数据到文件
data_recorder.record()
✅️️ 结合 DrissionPage 和 Recorder 进行数据采集。
from DrissionPage import ChromiumPage
from DataRecorder import Recorder
# 创建 ChromiumPage 对象,用于浏览器自动化
browser_page = ChromiumPage()
# 创建 Recorder 对象,用于记录数据
data_recorder = Recorder('movies.csv')
# 访问目标网页
browser_page.get('https://www.maoyan/board/4')
while True:
# 遍历页面上所有 dd 元素,获取电影信息
for movie in browser_page.eles('t:dd'):
# 获取需要的信息
rank_number = movie('t:i').text # 排名
movie_score = movie('.score').text # 评分
movie_title = movie('@data-act=boarditem-click').attr('title') # 电影标题
movie_star = movie('.star').text # 主演
release_time = movie('.releasetime').text # 上映时间
# 将获取的信息写入到记录器
data_recorder.add_data((rank_number, movie_title, movie_star, release_time, movie_score))
# 获取下一页按钮,如果存在则点击
next_button = browser_page('下一页', timeout=2)
if next_button:
next_button.click()
browser_page.wait.load_start()
# 如果不存在下一页按钮,则退出循环
else:
break
# 保存记录的数据到文件
data_recorder.record()
应用实例 : 采集猫眼电影 TOP100 榜
这个示例演示用浏览器采集数据。
✅️️ 采集目标 目标网址:https://www.maoyan/board/4
采集目标:排名、电影名称、演员、上映时间、分数
✅️️ 编码思路 按F12,可以看到每个电影信息都包含在
- 元素中,因此可批量获取
- 元素,遍历它们并再从其中获取每个电影的信息。
✅️️ 示例代码 以下代码可直接运行。
须要注意的是,这里用到记录器对象,详见DataRecorder。
from DrissionPage import ChromiumPage
from DataRecorder import Recorder
# 创建 ChromiumPage 对象,用于浏览器自动化
browser_page = ChromiumPage()
# 创建 Recorder 对象,用于记录数据
data_recorder = Recorder('data.csv')
# 访问目标网页
browser_page.get('https://www.maoyan/board/4')
while True:
# 遍历页面上所有 dd 元素,获取电影信息
for movie in browser_page.eles('t:dd'):
# 获取需要的信息
rank_number = movie('t:i').text # 排名
movie_score = movie('.score').text # 评分
movie_title = movie('@data-act=boarditem-click').attr('title') # 电影标题
movie_star = movie('.star').text # 主演
release_time = movie('.releasetime').text # 上映时间
# 将获取的信息写入到记录器
data_recorder.add_data((rank_number, movie_title, movie_star, release_time, movie_score))
# 获取下一页按钮,如果存在则点击
next_button = browser_page('下一页', timeout=2)
if next_button:
next_button.click()
browser_page.wait.load_start()
# 如果不存在下一页按钮,则退出循环
else:
break
# 保存记录的数据到文件
data_recorder.record()
✅️️ 结果 程序生成一个结果文件 data.csv,内容如下:
1,我不是药神,“主演:徐峥,周一围,王传君”,上映时间:2018-07-05,9.6
2,肖申克的救赎,“主演:蒂姆·罗宾斯,摩根·弗里曼,鲍勃·冈顿”,上映时间:1994-09-10(加拿大),9.5
3,海上钢琴师,“主演:蒂姆·罗斯,比尔·努恩 ,克兰伦斯·威廉姆斯三世”,上映时间:2019-11-15,9.3
4,绿皮书,“主演:维果·莫腾森,马赫沙拉·阿里,琳达·卡德里尼”,上映时间:2019-03-01,9.5
5,霸王别姬,“主演:张国荣,张丰毅,巩俐”,上映时间:1993-07-26,9.4
下面省略。。。