BeautifulSoup的find_all()方法:如何查找确切出现位置?
我正在使用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>]