使用beautifulsoup在html中查找文本
Posted
技术标签:
【中文标题】使用beautifulsoup在html中查找文本【英文标题】:Using beatifulsoup to find text on html 【发布时间】:2022-01-20 04:30:46 【问题描述】:这是我第一次使用beautifulsoup
作为刮刀工具,我只是慢慢地跟着每一步。
我用soup.find_all("div", class_="product-box__inner")
找到了我想要的元素列表,而这些部分内容现在还没有想到。我的问题如下,
这是 html,我的目标是“$0”,我已经尝试过
element.find("span", title= re.compile("$"))
我不能使用 element.select("dt > dd > span > span")
因为有多个具有相同标签格式的标签格式我根本不需要,有没有办法可以将 span data-fees-annual-value="" 定位到 .text 工作?
<div class="product-box__features-item">
<dt class="f-body-3 product-box__features-label">Annual fee</dt>
<dd class="f-title-5 product-box__features-text u-margin-0">
<span>
<span data-fees-annual-value="">$0</span>
</span>
</dd>
</div>
【问题讨论】:
【参考方案1】:css selectors
已接近您的目标,可以更具体地使用它们并直接在属性data-fees-annual-value
上引用:
soup.select_one('span[data-fees-annual-value]').text
示例
from bs4 import BeautifulSoup
html="""
<div class="product-box__features-item">
<dt class="f-body-3 product-box__features-label">Annual fee</dt>
<dd class="f-title-5 product-box__features-text u-margin-0">
<span>
<span data-fees-annual-value="">$0</span>
</span>
</dd>
</div>
"""
soup=BeautifulSoup(html,"html.parser")
soup.select_one('span[data-fees-annual-value]').text
输出
$0
【讨论】:
这解决了我的问题,因为直接指向 select_one('tag[attribute]') 抓取整行并用 .text 拉出文本,谢谢【参考方案2】:如果要按文本查找元素,请使用string
而不是title
:
element.find("span", string=re.compile('$'))
输出:
<span data-fees-annual-value="">$0</span>
【讨论】:
对不起,我没有提到它是一个很大的 html 页面,它会为我提取所有东西。但如果页面只有 1 个条件,即 和文本 $,则值得学习。谢谢你以上是关于使用beautifulsoup在html中查找文本的主要内容,如果未能解决你的问题,请参考以下文章
使用 BeautifulSoup 查找包含特定文本的 HTML 标签
需要使用 RegEx 和 BeautifulSoup 查找文本
python/beautifulsoup 查找所有带有特定锚文本的 <a href>