Python BeautifulSoup获取特定元素

5
如果我有这样的 HTML 代码:
<div class="new_info_next">
     <input type="hidden" value="133" id="new_id" class="new_id">
     <input type="hidden" value="0" id="default_pe" class="default_pe">
</div>

我想要在使用BeautifulSoup4时,从标签中只获取133这个值。
info = soup.find_all("div", {"class": "new_info_next"})
for inpu in info:
    for inpu1 in inpu.select('input'):
         print inpu1 .get('value')

但是输出结果是:
133
0

如何仅获取133

2个回答

9

使用soup.find()函数。

默认情况下,它将返回匹配的第一个元素,您可以这样做:

info = soup.find("div", {"class": "new_info_next"})

info.get('value') 应该是 133


1

既然您只需要迭代器中的第一个元素,直接对其进行寻址即可:

first = inpu.select('input')[0].get('value')
print(first)

我坚信我的答案比这个更有效率。这个会“查找所有匹配的元素”,然后获取所有匹配元素中的第一个,而我的方法只需要抓取第一个匹配项。 - northsideknight
@northsideknight,find()在BSoup内部通过调用find_all()实现,而find_all()是一个生成器——因此我猜想,在性能方面两者的差异完全可以忽略不计。 - MatsLindh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接