Python - Beautifulsoup只计算标记的外部标记子项

时间:2016-09-23 06:51:35

标签: python html web-scraping beautifulsoup

页面的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。

我认为它给了所有&#34; div&#34;内部&#34;形式&#34;标签

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用单个 css选择器 form[name=compareprd] > 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_all findChildren可以追溯到bs2天,仅提供向后兼容性。

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