DrissionPage 入门教程
与 requests 对比
本教程共 42 篇 · 第 40 篇 · 更新于 2026-07-29 · 约 5 分钟阅读
DrissionPageDrissionPage 入门教程requests对比选择指南
40. 与 requests 对比
本节目标:搞懂 DrissionPage 和 requests 各自的优劣,选对工具少走弯路。
工具定位
requests 是 Python 最经典的 HTTP 库。
它只负责发请求、收响应,不渲染页面。简单高效,适合接口调用和静态页面抓取。
DrissionPage 更像一个浏览器自动化工具。
它能渲染 JavaScript,能操作页面元素,能处理复杂的交互场景。
代码量对比
同样的功能,代码量差距明显。
获取元素内容
url = 'https://baike.baidu.com/item/python'
# requests 写法:
import requests
from lxml import etree
headers = {'User-Agent': 'Mozilla/5.0 ...'}
response = requests.get(url, headers=headers)
html = etree.HTML(response.text)
element = html.xpath('//h1')[0]
title = element.text
# DrissionPage 写法:
from DrissionPage import SessionPage
page = SessionPage()
page.get(url)
title = page('tag:h1').text
DrissionPage 自带默认 headers,不需要手动设置。
也不需要引入 lxml 做解析。
下载文件
url = 'https://www.baidu.com/img/flexible/logo/pc/result.png'
save_path = r'C:\download'
# requests 写法:
import requests
r = requests.get(url)
with open(f'{save_path}\\img.png', 'wb') as fd:
for chunk in r.iter_content():
fd.write(chunk)
# DrissionPage 写法:
from DrissionPage import SessionPage
page = SessionPage()
page.download(url, save_path, 'img') # 自动处理文件名
DrissionPage 的 download() 方法自动处理文件名冲突,支持重命名。
功能对比
| 功能 | requests | DrissionPage (SessionPage) |
|---|---|---|
| 发送 HTTP 请求 | 支持 | 支持 |
| 解析 HTML | 需要 lxml/BeautifulSoup | 内置 |
| 渲染 JavaScript | 不支持 | 支持(WebPage 模式) |
| 操作页面元素 | 不支持 | 支持 |
| 处理 cookies | 支持 | 支持 |
| Session 管理 | 支持 | 支持 |
| 下载文件 | 需要手动写 | 内置方法 |
requests 的优势
- 更轻量:只做 HTTP 请求,资源消耗小
- 更快:不渲染页面,纯请求响应
- 生态丰富:大量成熟的扩展库
- API 简洁:requests 的 API 设计被公认优秀
DrissionPage 的优势
- 自带解析:不需要额外引入解析库
- 统一 API:请求和解析用同一套语法
- 支持渲染:WebPage 模式能执行 JS
- 内置下载:
download()一步到位 - 模式切换:浏览器和数据包模式互通
适用场景
选 requests 的场景
- 调用 REST API
- 抓取静态网页(服务端渲染)
- 只需要请求响应,不需要解析 HTML
- 对性能要求极高(纯请求最快)
选 DrissionPage 的场景
- 需要统一请求 + 解析的工作流
- 需要下载文件并自动处理文件名
- 需要切换到浏览器模式执行 JS
- 需要 cookies 在两种模式间共享
- 懒得引入一堆解析库
效率对比
纯请求速度:requests > SessionPage > ChromiumPage
内存占用:ChromiumPage > SessionPage > requests
import time
# requests 最快
start = time.time()
for i in range(100):
requests.get('https://example.com/api')
print(f'requests: {time.time() - start:.2f}s')
# SessionPage 稍慢,但内置解析
start = time.time()
page = SessionPage()
for i in range(100):
page.get('https://example.com/api')
print(f'SessionPage: {time.time() - start:.2f}s')
# ChromiumPage 最慢,但功能最全
start = time.time()
page = ChromiumPage()
for i in range(10): # 只跑 10 次
page.get('https://example.com')
print(f'ChromiumPage: {time.time() - start:.2f}s')
组合使用
两者不冲突,可以组合。
# 用 requests 快速爬列表页
import requests
from lxml import etree
r = requests.get('https://example.com/list')
html = etree.HTML(r.text)
detail_urls = html.xpath('//a/@href')
# 用 DrissionPage 处理详情页(需要渲染 JS)
from DrissionPage import WebPage
page = WebPage()
for url in detail_urls:
page.get(url)
content = page('tag:article').text
小结
requests 是轻量级 HTTP 库,适合纯请求场景。
DrissionPage 是全能型工具,统一了请求和解析,还支持浏览器渲染。
根据场景选工具,也可以组合使用各取所长。