【Python爬虫实战】轻量级爬虫利器:DrissionPage之SessionPage与WebPage模块详解

news2024/12/27 8:24:25

  🌈个人主页:易辰君-CSDN博客
🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html

目录

前言

一、SessionPage

(一)SessionPage 模块的基本功能

(二)基本使用

(三)常用方法

(四)页面元素定位和数据提取

(五)Cookie 和会话管理

(六)SessionPage 的优点和局限性

(七)SessionPage 和 DriverPage 的搭配使用

(八)SessionPage总结

二、WebPage

(一)WebPage 的核心功能

(二)WebPage 的基本使用

(三)常用方法

(四)WebPage 的优缺点

(五)WebPage 和 Element 配合使用

(六)适用场景

(七)WebPage总结

三、总结


前言

在信息爆炸的时代,自动化网页爬取和数据获取逐渐成为必备技能。drissionPage 是一个基于 Selenium 和 Requests 的 Python 库,通过 SessionPageWebPage 两大模块,简化了网页的自动化操作与数据抓取。SessionPage 使用 HTTP 请求实现轻量级、高效的静态页面爬取,而 WebPage 则结合了动态页面操作和数据提取的强大功能。本教程将详细讲解 SessionPageWebPage 的使用方法及其核心功能,带您高效掌控网页数据。


一、SessionPage

drissionPage 是一个基于 Selenium 和 Requests 的 Python 库,用于简化网页自动化操作和数据爬取。它的 SessionPage 模块提供了一种无头的 HTTP 方式来操作网页,主要基于 requests 库实现,比起 Selenium 模块下的 DriverPageSessionPage 更轻量、速度更快,非常适合进行页面数据的快速爬取。

(一)SessionPage 模块的基本功能

SessionPage 的核心是使用 requests.Session 对象来模拟浏览器的请求和会话,因此它可以保留会话(如 cookies、session 变量等),方便对一些需要登录状态的页面进行爬取。它能完成 HTTP 请求、获取页面内容、解析页面数据等操作。

主要功能包括:

  • 自动维护会话状态(如 Cookie)

  • 设置请求头(User-Agent、Referer 等)

  • 执行 GET 和 POST 请求

  • 提取页面内容、元素文本、属性等数据

  • 操作模拟表单提交、文件上传、下载等

(二)基本使用

要使用 SessionPage,首先需要导入并创建一个 SessionPage 对象。以下是一个简单的使用示例:

from drission.page import SessionPage

# 创建一个 SessionPage 对象
session_page = SessionPage()

# 访问一个网页
session_page.get('https://example.com')

# 获取网页的标题
print(session_page.title)

# 获取网页的 HTML 源码
print(session_page.html)

# 获取某个元素的文本
print(session_page('.some-class').text)

(三)常用方法

SessionPage 提供了一些常用方法,帮助简化爬虫开发。以下是几个主要方法的介绍:

(1)get(url, **kwargs)

发送 GET 请求访问网页,支持传入请求参数、headers、cookies 等。

session_page.get('https://example.com', params={'key': 'value'}, headers={'User-Agent': 'custom-agent'})

(2)post(url, data=None, **kwargs)

发送 POST 请求,支持传入请求参数、headers、cookies 等。

session_page.post('https://example.com/login', data={'username': 'myusername', 'password': 'mypassword'})

(3)set_headers(headers)

设置默认请求头,后续的请求都会携带这个请求头。

session_page.set_headers({'User-Agent': 'my-custom-agent'})

(4)download(url, path)

session_page.download('https://example.com/image.png', 'path/to/save/image.png')

(四)页面元素定位和数据提取

SessionPage 提供了与 DriverPage 类似的选择器接口,用于提取页面元素信息。使用 session_page('css_selector') 可以快速定位页面元素并提取内容。

# 获取元素的文本
text = session_page('h1.title').text

# 获取元素的属性
link = session_page('a.link').attr('href')

# 获取页面中所有指定元素
all_links = session_page('a').all_attrs('href')

(五)Cookie 和会话管理

由于 SessionPage 基于 requests.Session,它能够很好地管理 cookies 和会话。可以通过以下方法来操作 cookies:

(1)cookies

直接访问 cookies 属性可以查看当前的 cookies。

print(session_page.cookies)

(2)set_cookies(cookies)

设置 cookies,可以传入字典格式的 cookies。

session_page.set_cookies({'name': 'value'})

(3)get_cookie(name)

获取指定名称的 cookie 值。

cookie_value = session_page.get_cookie('name')

(4)clear_cookies()

清除当前会话中的所有 cookies。

session_page.clear_cookies()

(六)SessionPage 的优点和局限性

优点

  • 速度快:基于 HTTP 请求,不需要加载浏览器,速度更快。

  • 低资源消耗:不需要启动浏览器进程,内存和 CPU 消耗低。

  • 方便爬取纯数据页面:适合用于获取不需要 JavaScript 渲染的静态页面数据。

局限性

  • 无法处理动态内容:SessionPage 无法处理依赖 JavaScript 渲染的内容,适合静态页面或数据接口的爬取。

  • 功能较少:相较于 Selenium,SessionPage 无法进行复杂的浏览器模拟操作,如点击、输入等。

(七)SessionPageDriverPage 的搭配使用

在一些情况下,页面中存在动态内容,而其他部分是静态内容,可以将 SessionPageDriverPage 配合使用。在动态内容加载完成后,通过 DriverPage 获取 cookies 并传递给 SessionPage,然后继续使用 SessionPage 来爬取其他页面,提升效率。

示例:

from drission import Drission
from drission.page import SessionPage, DriverPage

# 创建 Drission 对象
drission = Drission()

# 获取 DriverPage 和 SessionPage
driver_page = drission.driver_page
session_page = drission.session_page

# 使用 DriverPage 登录并获取 cookies
driver_page.get('https://example.com/login')
driver_page('input[name="username"]').input('myusername')
driver_page('input[name="password"]').input('mypassword')
driver_page('button[type="submit"]').click()

# 将登录后的 cookies 复制到 SessionPage
session_page.set_cookies(driver_page.get_cookies())

# 使用 SessionPage 访问其他页面
session_page.get('https://example.com/data')
print(session_page.html)

(八)SessionPage总结

SessionPagedrissionPage 中用于轻量级爬取的模块,适合在 Windows、MacOS 和 Linux 等环境下进行静态页面爬取。它通过封装 requests.Session 实现对 cookies、headers 等的管理,具备快速、低资源消耗的特点。如果需要操作动态网页,可以结合 DriverPage 使用,或直接使用 DriverPage 进行交互。


二、WebPage

WebPagedrissionPage 中用于操作和管理网页的类,它可以基于 DriverPage(使用 Selenium 驱动浏览器)和 SessionPage(使用 requests 进行 HTTP 请求)进行网页访问、数据提取和交互等操作。因此 WebPage 作为 drissionPage 中的核心类,支持丰富的网页操作功能,简化了常见的网页爬取和自动化工作。

(一)WebPage 的核心功能

WebPage 主要提供以下核心功能:

  1. 统一操作接口:不论是使用浏览器驱动(DriverPage)还是基于 HTTP 请求(SessionPage),WebPage 提供了相同的 API 接口。可以通过统一的方法操作页面元素、获取内容和管理会话。

  2. 简化的数据提取:提供简洁的选择器和数据提取方法,支持通过 CSS 选择器、XPath 等方式快速获取元素、文本、属性等信息。

  3. 适用于动态和静态页面:支持 JavaScript 渲染的页面,也可以处理纯静态页面,能够满足多种类型网站的需求。

  4. 会话管理:WebPage 能自动管理和保存会话信息(如 cookies),适合处理需要保持登录状态的任务。

(二)WebPage 的基本使用

首先创建 Drission 对象,并通过它生成 WebPage 实例。WebPage 会根据 Drission 的初始化配置,自动选择 DriverPageSessionPage,以便进行浏览器自动化或 HTTP 请求。

示例:

from drission import Drission
from drission.page import WebPage

# 初始化 Drission 实例
drission = Drission()

# 创建 WebPage 对象
page = WebPage(drission)

# 访问页面
page.get('https://example.com')

# 获取页面标题
print(page.title)

# 获取页面 HTML 源码
print(page.html)

(三)常用方法

WebPage 提供了丰富的方法来操作页面和提取内容。以下是一些常用方法的介绍:

(1)get(url, **kwargs)

用于加载指定的 URL 地址。对于 SessionPage,可以传入请求参数和 headers 等。

page.get('https://example.com')

(2)title

获取当前页面的标题。

print(page.title)

(3)html

返回页面的 HTML 源码。对于 SessionPage,它返回的是请求的响应内容,而对于 DriverPage,则是浏览器渲染后的 HTML。

print(page.html)

(4)text

获取页面的纯文本内容。

print(page.text)

(5)元素选择和提取

可以通过 WebPage 的选择器方法来快速获取页面中的元素。支持多种选择器类型,如 CSS、XPath 等。

  • page('css_selector'): 选择单个元素,返回 Element 对象。

  • page('css_selector').text: 获取元素的文本内容。

  • page('css_selector').attr('href'): 获取元素的某个属性值。

  • page('css_selector').all(): 获取多个匹配的元素。

# 获取元素的文本内容
text = page('h1.title').text

# 获取元素的属性
link = page('a.link').attr('href')

# 获取页面中所有指定元素
all_links = page('a').all_attrs('href')

(6)操作元素

DriverPage 模式下,WebPage 支持点击、输入文本、提交表单等操作。例如:

# 点击一个按钮
page('button.submit').click()

# 在输入框中输入文本
page('input#name').input('drission')

# 提交表单
page('form#login').submit()

(7)滚动和等待

DriverPage 模式下,可以执行滚动、等待等操作,模拟用户的交互。

# 滚动到页面底部
page.scroll_to('bottom')

# 等待某个元素出现
page.wait('div.content')

(四)WebPage 的优缺点

优点

  1. 通用性:WebPage 统一了动态和静态页面的操作接口,能自动选择 DriverPageSessionPage

  2. 丰富的页面操作支持:支持各种页面操作,简化了数据提取、页面交互等工作。

  3. 良好的会话管理:自动保存 cookies,适用于需要登录的页面。

局限性

  • WebPage 的一些功能(如点击、输入)仅在 DriverPage 下有效,在 SessionPage 下无法处理 JavaScript 动态内容。

  • 由于自动化的程度较高,在处理一些复杂页面交互时,可能需要额外的自定义代码。

(五)WebPage 和 Element 配合使用

WebPage 的选择器方法返回的对象是 Element,它表示页面中的一个具体元素。Element 对象允许进一步的操作,例如提取属性、点击、输入等。

示例:

# 获取某个元素
element = page('a.link')

# 获取属性
href = element.attr('href')

# 点击元素
element.click()

# 获取子元素
sub_element = element('span')

(六)适用场景

  • 动态网页数据提取:可以使用 DriverPage 模式获取 JavaScript 渲染的数据。

  • 静态网页爬取:使用 SessionPage 模式直接请求页面,速度快、性能高。

  • 登录后数据爬取:利用会话管理功能,通过 WebPage 可以在需要登录的页面中保持会话,方便多页面数据的批量爬取。

(七)WebPage总结

WebPage 是一个封装强大的网页操作类,整合了 DriverPageSessionPage 的功能,适合不同类型的页面操作。其统一的 API 设计,让开发者可以更方便地进行数据提取和页面交互,适用于动态和静态网页的自动化任务。同时,结合 Element 类的丰富操作接口,WebPage 成为一个非常强大、灵活的网页自动化和爬取工具。


三、总结

drissionPageSessionPageWebPage 模块,通过封装 Requests 和 Selenium,为开发者提供了一个高效灵活的网页操作和数据抓取工具。SessionPage 模块适合快速静态页面爬取,而 WebPage 则在动态交互和数据提取上表现出色。通过二者的合理组合,drissionPage 让数据采集更加简洁高效,无论是快速抓取静态数据,还是在需要保持会话状态的网页中提取信息,都可以游刃有余地应对,是一个理想的爬虫开发工具。

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

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

相关文章

Linux——自定义简单shell

shell 自定义shell目标普通命令和内建命令(补充) shell实现实现原理实现代码 自定义shell 目标 能处理普通命令能处理内建命令要能帮助我们理解内建命令/本地变量/环境变量这些概念理解shell的运行 普通命令和内建命令(补充) …

Vue进阶之单组件开发与组件通信

书接上篇,我们了解了如何快速创建一个脚手架,现在我们来学习如何基于vite创建属于自己的脚手架。在创建一个新的组件时,要在新建文件夹中打开终端创建一个基本的脚手架,可在脚手架中原有的文件中修改或在相应路径重新创建&#xf…

Webman中实现定时任务

文章目录 Webman中实现定时任务一、引言二、安装与配置1、安装Crontab组件2、创建进程文件3、配置进程文件随Webman启动4、重启Webman5、Cron表达式(补充)例子 三、使用示例四、总结 Webman中实现定时任务 一、引言 在现代的后端开发中,定时…

Android笔记(三十四):封装带省略号图标结尾的TextView

背景 项目需求需要实现在文本末尾显示一个icon,如果文本很长时则在省略号后面显示icon,使用TextView自带的drawableEnd可以实现,但是如果文本换行了则会显示在TextView垂直居中的位置,不满足要求,于是有了本篇的自定义…

多线程篇-8--线程安全(死锁,常用保障安全的方法,安全容器,原子类,Fork/Join框架等)

1、线程安全和不安全定义 (1)、线程安全 线程安全是指一个类或方法在被多个线程访问的情况下可以正确得到结果,不会出现数据不一致或其他错误行为。 线程安全的条件 1、原子性(Atomicity) 多个操作要么全部完成&a…

Day1 生信新手笔记

生信新手笔记 生信学习第一天笔记打卡。 转录组学中: 上游分析-基于linux,包括质控、过滤、比对、定量; 下游分析-基于R语言,包括差异分析、富集分析、可视化。 1. 级别标题 一个井号加空格 就是一级标题,两个井号加…

Git远程仓库操作

文章目录 远程仓库连接Gitee克隆代码 多人协同问题说明 🏡作者主页:点击! 🤖Git专栏:点击! ⏰️创作时间:2024年12月1日13点10分 远程仓库 Git 是分布式版本控制系统,同一个 Git …

virtualbox给Ubuntu22创建共享文件夹

1.在windows上的操作,创建共享文件夹Share 2.Ubuntu22上的操作,创建共享文件夹LinuxShare 3.在virtualbox虚拟机设置里,设置共享文件夹 共享文件夹路径:选择Windows系统中你需要共享的文件夹 共享文件夹名称:挂载至wi…

人工智能-深度学习-BP算法

BP算法的核心思想是通过计算损失函数对网络参数的梯度,然后使用梯度下降法来更新网络参数,从而最小化损失函数。 误差反向传播算法(BP)的基本步骤: 前向传播:正向计算得到预测值。 计算损失:通过损失函数计算预测值和真实值的差…

(免费送源码)计算机毕业设计原创定制:Apache+JSP+Ajax+Springboot+MySQL Springboot自习室在线预约系统

摘 要 远程预约是一种全新的网络租用方式,它通过互联网突破了时间和空间限制,实现了便捷快速的预约与管理功能。在对数据信息有效组织并整合了一定使用功能后,远程预约系统可以方便地实现预约与取消,以及信息查询等功能。经过本人…

【51单片机】程序实验910.直流电机-步进电机

主要参考学习资料:B站【普中官方】51单片机手把手教学视频 前置知识:C语言 单片机套装:普中STC51单片机开发板A4标准版套餐7 码字不易,求点赞收藏加关注(•ω•̥) 有问题欢迎评论区讨论~ 目录 程序实验9&10.直流电机-步进电机…

windows 应用 UI 自动化实战

UI 自动化技术架构选型 UI 自动化是软件测试过程中的重要一环,网络上也有很多 UI 自动化相关的知识或资料,具体到 windows 端的 UI 自动化,我们需要从以下几个方面考虑: 开发语言 毋庸置疑,在 UI 自动化测试领域&am…

我不是挂王-用python实现燕双鹰小游戏

一.准备工作 1.前言提要 作为程序员在浩瀚的数字宇宙中,常常感觉现实世界是一台精密运作的虚拟机,其底层的物理逻辑如同铁律般难以撼动。然而我们拥有在虚拟世界中自由驰骋、创造无限可能的独特力量。突发奇我想用Python写出燕双鹰的小游戏,这样想想就很…

会议直击|美格智能亮相2024紫光展锐全球合作伙伴大会,融合5G+AI共拓全球市场

11月26日,2024紫光展锐全球合作伙伴大会在上海举办,作为紫光展锐年度盛会,吸引来自全球的众多合作伙伴和行业专家、学者共同参与。美格智能与紫光展锐竭诚合作多年,共同面向5G、AI和卫星通信为代表的前沿科技,聚焦技术…

3. STM32_串口

数据通信的基础概念 什么是串行/并行通信: 串行通信就是数据逐位按顺序依次传输 并行通信就是数据各位通过多条线同时传输。 什么是单工/半双工/全双工通信: 单工通信:数据只能沿一个方向传输 半双工通信:数据可以沿两个方向…

RPC与HTTP调用模式的架构差异

RPC(Remote Procedure Call,远程过程调用)和 HTTP 调用是两种常见的通信模式,它们在架构上有以下一些主要差异: 协议层面 RPC:通常使用自定义的二进制协议,对数据进行高效的序列化和反序列化&am…

Microsoft Excel如何插入多行

1.打开要编辑的excel表,在指定位置,鼠标右键点击“插入”一行 2.按住shift键,鼠标的光标箭头会变化成如下图所示 3.一直按住shift键和鼠标左键,往下拖动,直至到插入足够的行

【python】图像、音频、视频等文件数据采集

【python】图像、音频、视频等文件数据采集 先安装所需要的工具一、Tesseract-OCRTesseract-OCR环境变量设置验证是否配置成功示例语言包下载失败 二、ffmpeg验证是否安装成功示例 先安装所需要的工具 一、Tesseract-OCR Tesseract是一个 由HP实验室开发 由Google维护的开源的…

虚拟机docker记录

最近看了一个up的这个视频,感觉docker真的挺不错的,遂也想来搞一下: https://www.bilibili.com/video/BV1QC4y1A7Xi/?spm_id_from333.337.search-card.all.click&vd_sourcef5fd730321bc0e9ca497d98869046942 这里我用的是vmware安装ubu…

C++STL之vector(超详细)

CSTL之vector 1.vector基本介绍2.vector重要接口2.1.构造函数2.2.迭代器2.3.空间2.3.1.resize2.3.2.capacity 2.4.增删查找 3.迭代器失效4.迭代器分类 🌟🌟hello,各位读者大大们你们好呀🌟🌟 🚀&#x1f68…