首页 / DrissionPage 入门教程 / 与 requests 对比

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() 方法自动处理文件名冲突,支持重命名。

功能对比

功能requestsDrissionPage (SessionPage)
发送 HTTP 请求支持支持
解析 HTML需要 lxml/BeautifulSoup内置
渲染 JavaScript不支持支持(WebPage 模式)
操作页面元素不支持支持
处理 cookies支持支持
Session 管理支持支持
下载文件需要手动写内置方法

requests 的优势

  1. 更轻量:只做 HTTP 请求,资源消耗小
  2. 更快:不渲染页面,纯请求响应
  3. 生态丰富:大量成熟的扩展库
  4. API 简洁:requests 的 API 设计被公认优秀

DrissionPage 的优势

  1. 自带解析:不需要额外引入解析库
  2. 统一 API:请求和解析用同一套语法
  3. 支持渲染:WebPage 模式能执行 JS
  4. 内置下载download() 一步到位
  5. 模式切换:浏览器和数据包模式互通

适用场景

选 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 是全能型工具,统一了请求和解析,还支持浏览器渲染。

根据场景选工具,也可以组合使用各取所长。