You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何抓取目标网站异步请求的API响应并嗅探网络流量?

抓取异步加载内容的解决方案

方法1:用Playwright模拟真实浏览器(最贴合你的需求)

这个工具会启动真实浏览器,自动等待页面异步请求完成,还能捕获所有网络请求。步骤如下:

  • 先安装依赖:pip install playwright,然后运行playwright install安装对应浏览器
  • 示例代码:
from playwright.sync_api import sync_playwright
from bs4 import BeautifulSoup

with sync_playwright() as p:
    # 启动浏览器,headless=True可切换为后台运行
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()

    # 监听所有XHR/Fetch类型的异步请求
    captured_requests = []
    def record_request(request):
        if request.resource_type in ("xhr", "fetch"):
            captured_requests.append(request.url)
    
    page.on("request", record_request)

    # 打开目标页面,等待网络空闲(500ms内无新请求即停止等待)
    page.goto("http://target.tld", wait_until="networkidle")
    # 也可手动等待固定时长:page.wait_for_timeout(10000)  # 等待10秒

    # 打印捕获到的异步请求URL
    for url in captured_requests:
        print(url)

    # 获取包含异步加载内容的页面源码,用BeautifulSoup解析
    final_html = page.content()
    soup = BeautifulSoup(final_html, "html.parser")

    browser.close()

方法2:直接调用后端API接口(效率更高)

如果能找到异步加载内容的接口,直接调用接口比模拟浏览器更高效:

  1. 打开浏览器开发者工具(F12),切换到「网络」标签后刷新页面
  2. 筛选XHR/Fetch类型的请求,定位到加载目标内容的接口
  3. 用requests直接调用该接口,示例代码:
import requests

# 替换为你找到的真实API地址
api_url = "http://api.target.tld/get-data"
# 请求头从浏览器网络请求中复制,比如User-Agent、Cookie、Referer等
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
    "Referer": "http://target.tld"
}

response = requests.get(api_url, headers=headers)
# 如果返回JSON格式数据,直接解析处理
data = response.json()

方法3:用Selenium捕获网络请求

和Playwright原理类似,通过模拟浏览器实现请求捕获,示例代码:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup

options = Options()
options.add_experimental_option("excludeSwitches", ["enable-logging"])
driver = webdriver.Chrome(options=options)

# 开启网络日志捕获
driver.execute_cdp_cmd("Network.enable", {})
captured_requests = []

def log_response(event):
    if "response" in event:
        url = event["response"]["url"]
        # 过滤目标API域名
        if "api.target.tld" in url:
            captured_requests.append(url)

driver.execute_cdp_cmd("Network.responseReceived", log_response)

driver.get("http://target.tld")
# 等待10秒让异步请求完成
driver.implicitly_wait(10)

for url in captured_requests:
    print(url)

final_html = driver.page_source
soup = BeautifulSoup(final_html, "html.parser")

driver.quit()

注意点

  • 多数网站有反爬机制,需设置合理请求头,避免短时间内频繁请求
  • 若目标内容需要登录权限,Playwright/Selenium可模拟登录流程,requests则需携带登录后的Cookie

内容的提问来源于stack exchange,提问作者Mr. B.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 13:50:25