📖 知识点
1. 什么是接口数据?
动态网页的数据,是浏览器向后台接口发请求、后台返回 JSON 数据、再渲染到页面。与其等页面渲染再抓,不如直接监听接口返回的数据,干净又高效。
2. 开启监听
用 page.listen.start(关键词) 开启网络监听,可指定只监听含某关键词的请求:
# 监听所有网络请求
page.listen.start("")
# 或只监听含特定关键字的请求(如接口路径)
page.listen.start("api")
3. 等待并获取数据包
# 监听后,等待捕获到一个请求的数据包
data_packet = page.listen.wait()
print(data_packet.url) # 请求的接口地址
print(data_packet.response.body) # 接口返回的数据
4. 完整套路
from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get("目标网址")
# 1. 开启监听(监听接口请求)
page.listen.start("api")
# 2. 触发数据加载(如滚动、点击、翻页)
page.scroll.to_bottom()
# 3. 等待并获取数据包
packet = page.listen.wait()
if packet:
print("接口地址:", packet.url)
print("返回数据:", packet.response.body)
💡 核心对象
packet.url:请求的接口地址packet.response.body:接口返回的数据(常为 JSON)page.listen.wait():阻塞等待下一个捕获的请求
⚠️ 易错提醒
- 监听要先
start,再触发请求,顺序别反listen.wait()会一直等到有请求,注意超时控制- 返回的 body 可能是 JSON 字符串,可用 json 模块解析
⚔️ Kata 实战任务
任务需求:
- 导入 ChromiumPage
- 访问一个数据通过接口加载的练习页
- 用
page.listen.start("")开启网络监听 - 触发一次数据加载(如滚动或点击)
- 用
page.listen.wait()获取数据包,打印接口地址 - 尝试打印接口返回数据
参考代码
from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get("https://www.baidu.com")
# 数据包捕捉咒:开启网络监听
page.listen.start("")
print("🎯 已开启网络监听")
# 触发一个请求(这里执行一次搜索加载)
page.ele(".s_ipt").input("Python")
page.ele("#su").click()
print("🔍 已触发数据请求")
# 等待并捕获数据包
packet = page.listen.wait()
if packet:
print("📦 捕获到请求:", packet.url)
print("📄 返回数据:", packet.response.body[:200])
运行输出(示意):
🎯 已开启网络监听
🔍 已触发数据请求
📦 捕获到请求: https://www.baidu.com/s?wd=Python
📄 返回数据: <!DOCTYPE html>...
🧠 思考题
- "监听接口返回数据" 相比 "等页面渲染再抓元素",有什么优势?
packet.response.body返回的一般是什么格式?要怎么转成 Python 能用的数据?
行者孙Python