【问题标题】:Using beatifulsoup to find text on html使用beautifulsoup在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>

【问题讨论】:

    标签: python html web-scraping beautifulsoup


    【解决方案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 个条件,即 和文本 $,则值得学习。谢谢你
    猜你喜欢
    • 2013-05-23
    • 2015-02-20
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 2013-09-18
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多