如何用Python通过XHR爬取高速出入口组合通行费数据并导出Excel
通行费数据爬取实现方案
1. 抓包提取XHR接口
打开目标页面后按F12启动开发者工具,切换到「网络」面板的「XHR/提取」分类,手动选择一组出入口查询通行费,就能捕捉到对应的后端请求:
- 记下请求地址、请求方法(一般为POST)、请求头、请求参数结构
- 同时查找站点初始化时加载的全量出入口点位接口,提取所有出入口的ID和名称映射,无需手动录入
2. Python请求代码实现
提前安装依赖:pip install requests pandas openpyxl
import requests import pandas as pd import time # 替换为你抓包得到的请求头,和浏览器请求保持一致即可避免拦截 headers = { "User-Agent": "替换为你自己浏览器的UA", "Referer": "替换为目标页面地址" } # 替换为你抓包得到的通行费查询接口地址 toll_api = "替换为实际查询接口地址" # 替换为你提取到的出入口列表,示例格式:[{"id": "123", "name": "Jones Branch Drive/Route 123"}] entry_points = [] exit_points = [] all_data = [] # 遍历所有出入口组合请求 for entry in entry_points: for exit_p in exit_points: # 请求参数和抓包得到的结构完全一致 req_params = { "entryId": entry["id"], "exitId": exit_p["id"] # 其他需要的参数按抓包结果补充 } try: resp = requests.post(toll_api, json=req_params, headers=headers, timeout=10) resp.raise_for_status() toll_info = resp.json() # 按你需要的字段整理数据 all_data.append({ "入口名称": entry["name"], "出口名称": exit_p["name"], "通行费金额": toll_info.get("toll"), "路线长度": toll_info.get("distance"), "预计通行时间": toll_info.get("duration") # 其他字段自行补充 }) # 控制请求频率,避免被封IP time.sleep(0.5) except Exception as e: print(f"请求失败,入口:{entry['name']},出口:{exit_p['name']},错误:{str(e)}")
3. 导出到Excel
直接用pandas处理生成Excel即可:
df = pd.DataFrame(all_data) # index=False表示不导出pandas自带的索引列 df.to_excel("expresslanes通行费数据.xlsx", index=False)
注意事项
- 如果接口有签名校验,需要逆向js生成签名参数,再带入请求中
- 遇到返回异常的请求可以新增3次以内的重试逻辑,提升数据完整度
- 如果站点有反爬机制,可考虑加代理IP池规避IP封禁
内容的提问来源于stack exchange,提问作者Ravi kumar Pandey
相关产品推荐
相关产品推荐

