BeautifulSoup的findall()方法:找到确切的事件?

时间:2014-03-29 17:43:30

标签: python html web-scraping beautifulsoup

我使用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 =&#34; product-item&#34; (仅限产品A),而不是儿童产品&#39;

如果我执行以下操作:

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

结果包括所有产品A,B,C和D.

我已经阅读了另一个post about the same question,我按照建议操作并执行了以下操作,但结果相同......它会返回所有产品。

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

我该怎么做才能找到类别与产品项目完全匹配的产品&#39; ??

1 个答案:

答案 0 :(得分:0)

不是100%的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>]