的Python - Beautifulsoup计数标签
问题描述:
HTML页面的只有外层标签的孩子:的Python - Beautifulsoup计数标签
<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
我认为它给所有的“形式”标签内的“分区”。
任何帮助表示赞赏。
答
您可以使用一个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")))
或者作为评论通递归=真但使用find_all, findChildren回到bs2天,只提供向后兼容性。
len(tag.find_all("div", recursive=False)
你认为是正确的,通过['递归= FALSE'](https://www.crummy.com/software/BeautifulSoup/bs4/doc/#the-recursive-argument)到'findChildren'为了只找到直接的孩子。你的HTML看起来像标签汤,但不要关闭'div.gridBox'标签。 –
谢谢!.Ah对不起,我写错了代码示例。更新了示例。 – Kishan