如何用Python脚本获取维基百科页面侧边栏表格数据?
解决维基百科API无法获取侧边栏表格的问题
你用prop=extracts拿不到侧边栏表格的原因很明确:这个API参数默认只返回页面的正文提取内容,那些右侧的信息框表格(也就是你说的"Ford Fusion""First generation""Second generation"这类表格)不在extracts的返回范围内。
下面给你两种可行的修改方案:
方案1:获取完整解析后的页面HTML
通过prop=revisions参数获取页面完整的解析后HTML,这样就能包含所有表格元素。构造请求时需要加上rvprop=content和rvparse参数,让API返回渲染好的HTML内容。
示例代码:
import requests from bs4 import BeautifulSoup api_url = "https://en.wikipedia.org/w/api.php" request_params = { "action": "query", "format": "json", "titles": "Ford Fusion (Americas)", "prop": "revisions", "rvprop": "content", "rvparse": "" } response = requests.get(api_url, params=request_params) response_data = response.json() # 提取页面的HTML内容 page_html = next(iter(response_data['query']['pages'].values()))['revisions'][0]['*'] # 解析HTML找侧边栏表格(这类表格通常带infobox类) soup = BeautifulSoup(page_html, 'html.parser') infobox_tables = soup.find_all('table', class_='infobox') print(f"找到{len(infobox_tables)}个侧边栏表格")
方案2:直接获取结构化的信息框数据
维基百科API提供了prop=infoboxes参数,可以直接返回信息框的结构化数据,不需要手动解析HTML,效率更高。
示例代码:
import requests api_url = "https://en.wikipedia.org/w/api.php" request_params = { "action": "query", "format": "json", "titles": "Ford Fusion (Americas)", "prop": "infoboxes" } response = requests.get(api_url, params=request_params) response_data = response.json() page_info = next(iter(response_data['query']['pages'].values())) infoboxes = page_info.get('infoboxes', []) # 遍历输出每个信息框的内容 for idx, infobox in enumerate(infoboxes): print(f"--- 第{idx+1}个信息框:{infobox['name']} ---") for field_name, field_value in infobox['data'].items(): print(f"{field_name}: {field_value['value']}")
两种方案对比:
- 方案1适合需要保留HTML结构、做进一步页面元素分析的场景;
- 方案2直接拿到结构化数据,适合只需要提取表格内容的场景,代码更简洁。
内容的提问来源于stack exchange,提问作者Jed
相关产品推荐
相关产品推荐

