行者孙Python

破障篇-Day22|数据包捕捉咒:拦截网络请求,抓取接口数据

📖 知识点

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():阻塞等待下一个捕获的请求

⚠️ 易错提醒

  1. 监听要先 start,再触发请求,顺序别反
  2. listen.wait() 会一直等到有请求,注意超时控制
  3. 返回的 body 可能是 JSON 字符串,可用 json 模块解析

⚔️ Kata 实战任务

任务需求:

  1. 导入 ChromiumPage
  2. 访问一个数据通过接口加载的练习页
  3. 用 page.listen.start("") 开启网络监听
  4. 触发一次数据加载(如滚动或点击)
  5. 用 page.listen.wait() 获取数据包,打印接口地址
  6. 尝试打印接口返回数据

参考代码

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>...

🧠 思考题

  1. "监听接口返回数据" 相比 "等页面渲染再抓元素",有什么优势?
  2. packet.response.body 返回的一般是什么格式?要怎么转成 Python 能用的数据?
‹ 返回目录
🏠首页 Python 📦资源 👤关于我