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

如何爬取航班数据表格并避免返回空结果?技术求助

解决Flightradar24航班表格数据提取为空的问题

原代码问题分析

BeautifulSoup方案失效原因

目标航班表格是通过JavaScript动态渲染加载的,requests.get()获取的仅为页面初始HTML,此时表格数据尚未注入到页面中,因此soup.find("table", id='tbl-datatable')无法找到目标元素,返回空结果。

Selenium方案失效原因

代码中错误调用了element.get_attribute('tbl-datatable'),tbl-datatable是表格的ID而非属性名,无法通过该方法获取表格数据。

有效解决方案

方案1:Selenium结合Pandas提取表格

利用Selenium等待表格完全加载,获取表格完整HTML后用Pandas解析为结构化数据:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd

# 初始化浏览器
browser = webdriver.Chrome()
browser.set_window_size(1120, 550)
url = 'https://www.flightradar24.com/data/aircraft/ja11jc'
browser.get(url)

# 等待表格可见(比仅等待元素存在更稳妥)
table = WebDriverWait(browser, 10).until(
    EC.visibility_of_element_located((By.ID, "tbl-datatable"))
)

# 获取表格完整HTML并解析为DataFrame
table_html = table.get_attribute('outerHTML')
flight_data = pd.read_html(table_html)[0]

# 打印或处理数据
print(flight_data)
browser.quit()

方案2:直接调用API接口(更高效)

通过浏览器开发者工具查看网络请求,可找到加载航班数据的API接口,直接请求API获取JSON格式数据,无需渲染页面:

import requests
import pandas as pd

# 替换为实际找到的API接口
api_url = "https://www.flightradar24.com/v1/aircraft/track?aircraft=JA11JC&page=1&limit=20"
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"
}

response = requests.get(api_url, headers=headers)
data = response.json()

# 将JSON数据转换为DataFrame
flight_data = pd.DataFrame(data['data']['track'])
print(flight_data)

注:API接口可能随网站更新变化,需自行通过开发者工具确认最新接口及参数。

内容的提问来源于stack exchange,提问作者Karl Zammit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:45:43