使用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>

使用 BeautifulSoup 查找网页上的特定文本

使用 python 和正则表达式 BeautifulSoup lxml 查找文本

使用 BeautifulSoup 查找 html 中的所有表