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

如何用Python从Wikidata人物页面指定div提取单词‘human’

解决方法

你的问题出在直接定位到了div元素,而目标文本“human”在div内部的<a>标签里,而且.get('href')是获取标签的href属性,不是文本内容。可以通过以下两种方式修改代码:

方法一:先找div,再提取内部a标签的文本

修改后的代码:

import requests
from bs4 import BeautifulSoup

page = requests.get('https://www.wikidata.org/wiki/Q1124')
soup = BeautifulSoup(page.text,'html.parser')
# 先找到目标div
target_div = soup.find("div", attrs={"class":"wikibase-snakview-value wikibase-snakview-variation-valuesnak"})
# 找到div里的a标签,再获取其文本内容
human_text = target_div.find('a').text
print(human_text)  # 输出: human

方法二:直接定位到目标a标签

可以直接通过父div的class来定位内部的a标签,一步到位:

import requests
from bs4 import BeautifulSoup

page = requests.get('https://www.wikidata.org/wiki/Q1124')
soup = BeautifulSoup(page.text,'html.parser')
# 直接找到div下的a标签
human_text = soup.find("div", attrs={"class":"wikibase-snakview-value wikibase-snakview-variation-valuesnak"}).find('a').text
print(human_text)

补充说明

  • .text方法用于提取标签包裹的文本内容,而.get('属性名')是获取标签的属性值(比如href、title这些),所以之前用.get('href')返回None是因为div标签本身没有href属性,href是a标签的属性。
  • 如果担心找不到元素报错,可以加个判断,避免程序崩溃:
target_div = soup.find("div", attrs={"class":"wikibase-snakview-value wikibase-snakview-variation-valuesnak"})
if target_div:
    a_tag = target_div.find('a')
    if a_tag:
        print(a_tag.text)
    else:
        print("未找到a标签")
else:
    print("未找到目标div")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:27:17