gpt4 book ai didi

python - 从 Beautiful Soup 上的类型 'Navigable String' 和 'Tag' 中提取文本

转载 作者:行者123 更新时间:2023-12-01 03:32:20 28 4
gpt4 key购买 nike

我被困在解析烂番茄网站的部分内容中,该网站将评论家评分作为标签,并分别使用“%”。我遵循了一些建议,例如使用 find_all('span',text="true"),但 Python 3.5.1 shell 返回了此错误: AttributeError: 'NavigableString' object has no attribute 'find_all' 我还尝试查找 Beautiful Soup 对象 critiscore 的直接子对象,但收到了相同的错误。请告诉我哪里错了。这是我的Python代码:

def get_rating(address):
"""pull ratings numbers from rotten tomatoes"""
RTaddress = urllib.request.urlopen(address)
tomatoe = BeautifulSoup(RTaddress, "lxml")
for criticscore in tomatoe.find('span', class_=['meter-value superPageFontColor']):
print(''.join(criticscore.find_all('span', recursive=False))) #print the Tomatometer

此外,这是我感兴趣的烂番茄上的代码:

<div class="critic-score meter">
<a href="#contentReviews" class="unstyled articleLink" id="tomato_meter_link">
<span class="meter-tomato icon big medium-xs certified_fresh pull-left"></span>
<span class="meter-value superPageFontColor"><span>96</span>%</span>
</a>
</div>

最佳答案

问题所在是这一行:

for criticscore in tomatoe.find('span', class_=['meter-value superPageFontColor']):

在这里,您通过 find() 定位单个元素,然后迭代其子元素,这些子元素可以是文本节点以及其他元素(当您迭代元素时,这就是发生在 BeautifulSoup 中)。

相反,您可能想使用 find_all() 而不是 find():

for criticscore in tomatoe.find_all('span', class_=['meter-value superPageFontColor']):

或者,您可以使用单个 CSS selector相反:

for criticscore in tomatoe.select('span.meter-value > span'):
print(criticscore.get_text())

其中 > 表示直接的父子关系(这是您的 recursive=False 替换)。

关于python - 从 Beautiful Soup 上的类型 'Navigable String' 和 'Tag' 中提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40749270/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com