如何抓取指定筛选条件的网站乘客数据并保存为CSV文件
解决BTS乘客数据筛选丹佛(DEN)目的地的参数问题
问题原因
你当前代码的核心问题是请求参数不匹配网站表单的实际字段名,该网站的目的地机场筛选需要使用DestAirport和DestAirportList参数,而非AirportList;同时建议使用会话保持Cookie,避免因无会话导致筛选失效。
修正后的代码
import requests import pandas as pd # 创建会话,保持Cookie(部分网站需要会话才能正确处理表单提交) session = requests.Session() # 先访问目标页面,获取必要的会话信息 base_url = "https://www.transtats.bts.gov/Data_Elements.aspx?Data=1" session.get(base_url) # 正确的请求参数:指定目的地为DEN,航司保持默认所有 params = { "Data": "1", "Carrier": "All", "CarrierList": "All", "DestAirport": "DEN", # 目的地机场代码 "DestAirportList": "DEN", # 对应表单的目的地列表参数 "Submit": "Submit" # 提交按钮参数 } # 发送POST请求 response = session.post(base_url, data=params) # 检查请求状态 if response.status_code == 200: print("请求成功,开始解析数据") else: print(f"请求失败,状态码:{response.status_code}") exit() # 解析HTML中的表格(优先匹配目标列名,避免索引错误) dfs = pd.read_html(response.text) target_df = None for i, df in enumerate(dfs): if "Destination Airport" in df.columns: target_df = df print(f"找到目标表格,索引为{i}") break # 如果未匹配到目标列,默认取最后一个表格 if not target_df: target_df = dfs[-1] print("未匹配到目标列名,使用最后一个表格") # 查看数据基本信息 print(target_df.head()) print(target_df.info()) # 保存到CSV file_path = r'C:\Users\harddrive\passenger_data_DEN.csv' target_df.to_csv(file_path, index=False) print(f"数据已保存到:{file_path}")
关键参数说明
DestAirport:指定目的地机场的代码,这里为DENDestAirportList:对应页面表单中目的地机场的列表选择参数,必须和DestAirport保持一致- 使用
requests.Session():维持会话状态,确保网站能正确识别表单提交的上下文,避免筛选条件被忽略
内容的提问来源于stack exchange,提问作者user26311416
相关产品推荐
相关产品推荐

