Python如何从需登录的网站提取JSON数据?
获取目标网站JSON数据的可行方案
一、优化已登录会话复用方案
既然你已有带登录状态的浏览器配置文件,可以尝试以下更稳定的方式:
- 用
playwright替代Selenium:它对已登录会话的兼容性更好,直接加载浏览器配置文件后可拦截接口响应。示例代码:
from playwright.sync_api import sync_playwright with sync_playwright() as p: # 替换为你的Chrome用户数据目录路径 browser = p.chromium.launch_persistent_context( user_data_dir="/Users/xxx/Library/Application Support/Google/Chrome", headless=False ) page = browser.new_page() page.goto("目标网站地址") # 监听响应,捕获目标JSON接口 def capture_json(response): if "目标接口特征关键词" in response.url and response.status == 200: print(response.json()) browser.close() page.on("response", capture_json) # 触发数据加载操作(如点击、滚动) page.wait_for_timeout(5000) browser.close()
- 补全Cookie与请求头:从Selenium导出Cookie时,要保留所有字段(
domain、secure等),同时复制浏览器的User-Agent、Referer等请求头,再用requests发起请求:
import requests # 从Selenium获取的Cookie列表 selenium_cookies = driver.get_cookies() cookies = {c['name']: c['value'] for c in selenium_cookies} headers = { "User-Agent": driver.execute_script("return navigator.userAgent;"), "Referer": "目标网站的来源页URL" } response = requests.get("目标JSON接口URL", cookies=cookies, headers=headers) if response.status_code == 200: print(response.json())
二、精准抓包确认接口细节
先通过浏览器开发者工具的Network面板,明确目标接口的关键信息:
- 记录接口的请求URL、请求方法(GET/POST)、自定义请求头(如
Authorization、X-CSRF-Token) - 检查页面的
localStorage/sessionStorage或HTML源码中是否嵌入了必要的Token,这类信息常是请求成功的关键
三、自动化处理HAR文件
如果不想手动操作HAR,可通过代理自动捕获目标JSON:
- 使用
mitmproxy编写脚本拦截请求,自动保存目标响应。示例脚本(保存为save_json.py):
from mitmproxy import http class CaptureTargetJSON: def response(self, flow: http.HTTPFlow) -> None: if "目标接口特征关键词" in flow.request.url: with open("target_data.json", "w", encoding="utf-8") as f: f.write(flow.response.text) addons = [CaptureTargetJSON()]
运行命令mitmproxy -s save_json.py,配置浏览器使用代理127.0.0.1:8080,访问网站后即可自动保存目标JSON数据。
内容的提问来源于stack exchange,提问作者Lucas Duarte Almeida
相关产品推荐
相关产品推荐

