0


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

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

前言

在信息爆炸的时代,自动化网页爬取和数据获取逐渐成为必备技能。

drissionPage

是一个基于 Selenium 和 Requests 的 Python 库,通过

SessionPage

WebPage

两大模块,简化了网页的自动化操作与数据抓取。

SessionPage

使用 HTTP 请求实现轻量级、高效的静态页面爬取,而

WebPage

则结合了动态页面操作和数据提取的强大功能。本教程将详细讲解

SessionPage

WebPage

的使用方法及其核心功能,带您高效掌控网页数据。


一、SessionPage

drissionPage

是一个基于 Selenium 和 Requests 的 Python 库,用于简化网页自动化操作和数据爬取。它的

SessionPage

模块提供了一种无头的 HTTP 方式来操作网页,主要基于

requests

库实现,比起

Selenium

模块下的

DriverPage

SessionPage

更轻量、速度更快,非常适合进行页面数据的快速爬取。

(一)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 无法进行复杂的浏览器模拟操作,如点击、输入等。

(七)

SessionPage

DriverPage

的搭配使用

在一些情况下,页面中存在动态内容,而其他部分是静态内容,可以将

SessionPage

DriverPage

配合使用。在动态内容加载完成后,通过

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总结

SessionPage

drissionPage

中用于轻量级爬取的模块,适合在 Windows、MacOS 和 Linux 等环境下进行静态页面爬取。它通过封装

requests.Session

实现对 cookies、headers 等的管理,具备快速、低资源消耗的特点。如果需要操作动态网页,可以结合

DriverPage

使用,或直接使用

DriverPage

进行交互。


二、WebPage

WebPage

drissionPage

中用于操作和管理网页的类,它可以基于

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

的初始化配置,自动选择

DriverPage

SessionPage

,以便进行浏览器自动化或 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

是一个封装强大的网页操作类,整合了

DriverPage

SessionPage

的功能,适合不同类型的页面操作。其统一的 API 设计,让开发者可以更方便地进行数据提取和页面交互,适用于动态和静态网页的自动化任务。同时,结合

Element

类的丰富操作接口,

WebPage

成为一个非常强大、灵活的网页自动化和爬取工具。


三、总结

drissionPage

SessionPage

WebPage

模块,通过封装 Requests 和 Selenium,为开发者提供了一个高效灵活的网页操作和数据抓取工具。

SessionPage

模块适合快速静态页面爬取,而

WebPage

则在动态交互和数据提取上表现出色。通过二者的合理组合,

drissionPage

让数据采集更加简洁高效,无论是快速抓取静态数据,还是在需要保持会话状态的网页中提取信息,都可以游刃有余地应对,是一个理想的爬虫开发工具。


本文转载自: https://blog.csdn.net/2401_86688088/article/details/143726622
版权归原作者 易辰君 所有, 如有侵权,请联系我们删除。

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

还没有评论