如何爬取航班数据表格并避免返回空结果?技术求助
解决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
相关产品推荐
相关产品推荐

