BeautifulSoup的find_all()方法:如何查找确切出现位置?

0 投票
1 回答
938 浏览
提问于 2025-04-18 00:27

我正在使用Python和BeautifulSoup进行网页抓取。

比如,我有以下的HTML代码需要抓取:

<ul>
    <li class="product-item">Product A</li>
    <li class="product-item child-product">Product B</li>
    <li class="product-item child-product">Product C</li>
    <li class="product-item child-product">Product D</li>
</ul>

我想用BeautifulSoup,只找到类名为"class='product-item'"的产品(也就是只有产品A),而不是那些'child-products'。

如果我这样做:

product_list = soup.find_all('li', {'class': 'product-item'})

结果却包括了所有的产品A、B、C和D。

我看过另一个关于同样问题的帖子,按照建议的方法操作了,但结果还是一样……它返回了所有的产品。

product_list = soup.findAll(attrs={'class': re.compile(r"^product-item$")})

我该怎么做才能找到类名完全匹配'product-item'的产品呢?

1 个回答

0

这不是一个完全依赖BeautifulSoup的解决方案,但你可以通过结合使用bs4和常规的列表推导来实现你需要的功能。

>>> [e for e in soup.find_all('li', class_='product-item') if len(e['class'])==1]

[<li class="product-item">Product A</li>]

撰写回答