如何使用SPARQL查询提取维基百科列表信息,获取正在发生的武装冲突列表
提取正在进行的武装冲突列表方案
页面定位规则
- 目标页的所有冲突列表都存放在类名为
wikitable sortable的表格中,可直接通过DOM节点的class属性定位。 - 该页面本身是专门收录进行中武装冲突的专题页,默认所有表格内条目均为正在进行状态,无需额外筛选。若你是从包含历史冲突的全量列表页提取,可定位表格中
Status列,匹配包含Ongoing关键词的条目即可。
可直接运行的Python实现示例
import requests from bs4 import BeautifulSoup import pandas as pd # 配置请求头避免反爬拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } # 填入目标页面地址即可 page_url = "目标页面URL" response = requests.get(page_url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") # 定位所有冲突表格 conflict_tables = soup.find_all("table", class_="wikitable sortable") all_conflicts = pd.DataFrame() # 遍历表格合并全量数据 for table in conflict_tables: table_df = pd.read_html(str(table))[0] all_conflicts = pd.concat([all_conflicts, table_df], ignore_index=True) # 若需额外筛选进行中条目可取消下方注释 # all_conflicts = all_conflicts[all_conflicts["Status"].str.contains("Ongoing", na=False)] # 输出最终结果 print(all_conflicts.to_csv(sep="\t", na_rep="无"))
注意事项
- 若页面更新后表格结构变化,可先打印表格的
th节点内容确认表头字段,调整筛选逻辑即可 - 维基百科对高频请求有访问限制,建议控制请求频率不要高于1次/秒
内容的提问来源于stack exchange,提问作者Nora
相关产品推荐
相关产品推荐

