前言
在网页数据采集这件事上,很多人一开始都会在'要不要开浏览器'和'直接发请求是不是够用'之间来回折腾。DrissionPage 把这两条路统一到了一个比较顺手的框架里:SessionPage 负责轻量、快速的 HTTP 抓取,WebPage 则把浏览器操作和请求式访问整合在一起,既能处理静态页面,也能应对需要交互的动态页面。
下面我们就顺着这个思路,分别看看这两个模块各自擅长什么、怎么用、适合放在什么场景里。
一、SessionPage
SessionPage 更像是给爬虫准备的一把轻便短刀。它基于 requests.Session 工作,不启动浏览器,也不需要承受图形界面的开销,所以在抓取静态页面、接口数据、需要保持登录态的页面时,效率通常会更高。
1. 核心能力
SessionPage 的重点不在'模拟人操作网页',而在'像一个稳定的 HTTP 客户端那样工作'。它会帮你维护会话状态,常见的 Cookie、请求头、表单提交这些事情都能顺手处理。
它常做的事情包括:
- 维护会话状态,例如 Cookie 和 Session
- 设置请求头,如
User-Agent、Referer - 发送
GET、POST请求 - 提取页面文本、属性和链接等信息
- 处理表单提交、文件下载等请求型操作
2. 基本使用
先创建一个 SessionPage 对象,接着就可以像访问普通网页一样去请求页面,再读取标题、源码或元素内容。
from drission.page import SessionPage
session_page = SessionPage()
session_page.get('https://example.com')
print(session_page.title)
print(session_page.html)
print(session_page('.some-class').text)
这段代码看起来简单,但实际很实用。对于那些不依赖 JavaScript 渲染的页面,SessionPage 往往已经够用,而且响应速度会比浏览器方案更漂亮。
3. 常用方法
SessionPage 的接口并不绕,常见操作基本都围绕请求和会话展开。
get(url, **kwargs)
发送 GET 请求,可以顺手带上参数、请求头、Cookie 等信息。
session_page.get(
'https://example.com',
params={'key': 'value'},
headers={'User-Agent': 'custom-agent'}
)
post(url, data=None, **kwargs)
发送 POST 请求,登录、提交表单、调用接口时都经常用到。
session_page.post(
,
data={: , : }
)


