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

如何使用BeautifulSoup精准提取Wikidata目标div内的有效姓名数据

问题根因

原有代码选择的wikibase-snakview-variation-valuesnak类匹配范围过大,会把属性值下挂载的参考文献、引用序号等附属节点的内容一并抓取。Wikidata结构化属性中,P40这类关联实体的有效主值,全部存放在带有wikibase-statementview-mainsnak类的主声明容器内,参考资料、限定属性等冗余内容都在同级其他子节点,不会混入主容器。

通用实现代码

把查找范围限定在主声明节点内即可,无需额外编写内容过滤规则,天然适配子女数量不同的所有Wikidata人物页面,不会抓取到无关内容:

# 定位P40(子女)属性根区块
p40_container = soup.find('div', id='P40')
# 仅匹配主声明下的属性值节点,自动排除参考链接、引用编号等冗余内容
main_statement_nodes = p40_container.find_all('div', class_='wikibase-statementview-mainsnak')
children_list = [
    node.find('div', class_='wikibase-snakview-variation-valuesnak').text.strip()
    for node in main_statement_nodes
]
print(children_list)
运行结果

针对测试页面运行后,输出完全符合预期:

['Joe Hill', 'Owen King', 'Naomi King']

方案特性:

  • 适配任意子女数量的Wikidata条目,不会漏抓有效姓名
  • 天然过滤参考链接、引用数字、属性限定值等冗余内容,无需额外写URL、数字匹配的过滤逻辑
  • 逻辑可复用,抓取其他Wikidata结构化属性(如配偶、作品、国籍等)时,仅需替换对应属性的ID即可正常使用

提示:如果运行时找不到P40容器,先检查请求时是否携带了合法的User-Agent,确保拿到的是完整的页面静态源码,而非反爬拦截页或未加载完整的DOM片段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:27:34