【问题标题】:Beautifulsoup Strainer to strain items from a specific container onlyBeautifulsoup 过滤器仅用于过滤特定容器中的物品
【发布时间】:2022-01-23 08:41:43
【问题描述】:

是否可以制作一个 Beautifulsoup 过滤器,只过滤来自“container-01”的所有“订单卡”(没有来自其他容器的“订单卡”)? 示例 HTML 下方

<div class="items-container" container-id="container-01">
    <div class="order-card">order_01
        <div class="item-card">item1</div>
        <div class="item-card">item2</div>
        <div class="item-card">item3</div>
        <div class="item-card">item4</div>
    </div>
    <div class="order-card">order_02
        <div class="item-card">itemA</div>
        <div class="item-card">itemB</div>
        <div class="item-card">itemC</div>
        <div class="item-card">itemD</div>
    </div>
    <div class="order-card">order_03
        <div class="item-card">itemW</div>
        <div class="item-card">itemX</div>
        <div class="item-card">itemY</div>
        <div class="item-card">itemZ</div>
        <div class="item-card">item</div>
    </div>
</div>
<div class="items-container" container-id="container-02">
    <div class="order-card">order_53
        <div class="item-card">item_7</div>
        <div class="item-card">item_8</div>
    </div>
</div>
<div class="items-container" container-id="container-03">
    <div class="order-card">order_13
        <div class="item-card">item_16</div>
        <div class="item-card">item_17</div>
        <div class="item-card">item_18</div>
    </div>
</div>

到目前为止,我所拥有的是下面的代码,它从所有容器中提取所有“订单卡”。

目标是“page_soup”只包含“container-01”中的所有“order-card”项目。

随后的循环使用“page_soup”遍历“order-card”中的每个项目,以获取每个“item-card”的详细信息。

上面改写了! 目标是仅从“container-01”中的每个“item-card”中获取详细信息。

除了“container-01”之外,不需要解析任何其他容器。

only_item_cells = SoupStrainer('div', attrs={"class":"order-card"})
page_soup = BeautifulSoup(page_html, 'html.parser', parse_only=only_item_cells)

接下来是一个循环,从所有容器中的所有“项目卡”中获取详细信息。事实上,这是不想要的,因为输出仅包含来自“container-01”以外的容器中的项目。

在 Anaconda、Win64 上运行 Python 3.8.8

【问题讨论】:

    标签: python html beautifulsoup


    【解决方案1】:

    按照您的指示使用适当的属性:

    only_item_cells = SoupStrainer('div', attrs= {"container-id": "container-01"})

    【讨论】:

    • 你的答案当然是正确的。我不得不重新表述目标,因为我没有足够清晰地定义目标。本质上,“page_soup”应该只包含“container-01”中的“order-cards”。
    猜你喜欢
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 2020-08-29
    • 1970-01-01
    相关资源
    最近更新 更多