如何用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
相关产品推荐
相关产品推荐

