【问题标题】:Python - Beautifulsoup count only outer tag children of a tagPython - Beautifulsoup 仅计算标签的外部标签子项
【发布时间】:2017-01-31 22:28:45
【问题描述】:

页面的 HTML:

<form name="compareprd" action="">
    <div class="gridBox product " id="quickLookItem-1">
        <div class="gridItemTop">
        </div>
    </div>
    <div class="gridBox product " id="quickLookItem-2">
        <div class="gridItemTop">
        </div>
    </div>
    <!-- many more like this. -->

我正在使用美丽的汤来报废一页。在该页面中,我可以通过其名称获取表单标签。

tag = soup.find("form", {"name": "compareprd"})

现在我想计算所有直接子 div,但不是所有嵌套 div。 例如,表单中有 20 个直接 div。 我试过了:

len(tag.findChildren("div"))

但它给了 1500。

我认为它在“form”标签中给出了所有“div”。

任何帮助表示赞赏。

【问题讨论】:

  • 您认为正确,将recursive=False 传递给findChildren 以便仅查找直接子级。您的 HTML 看起来像是标签汤,但您没有关闭 div.gridBox 标签。
  • 谢谢!啊对不起,我写错了示例代码。更新了示例。

标签: python html web-scraping beautifulsoup


【解决方案1】:

您可以使用单个 css 选择器 form[name=compareprd] &gt; div 来查找 div 的,它们是表单的直接子级:

html  = """<form name="compareprd" action="">
<div class="gridBox product " id="quickLookItem-1">
    <div class="gridItemTop">
    </div>
</div>

<div class="gridBox product " id="quickLookItem-2">
    <div class="gridItemTop">
    </div>
</div>
</form>"""

from bs4 import BeautifulSoup

soup = BeautifulSoup(html)


print(len(soup.select("form[name=compareprd] > div")))

或如评论通过 recursive=True 但使用 find_allfindChildren 可追溯到 bs2 天,仅用于向后兼容。

  len(tag.find_all("div", recursive=False)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 2016-10-17
    • 2021-10-17
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多