2014-03-29 32 views
0

我使用Python和BeautifulSoup進行網頁抓取。BeautifulSoup的find_all()方法:找到確切的發生?

例如,我有以下的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 =「產品項目」(只產品A)的產品,而不是在 '兒童產品'

如果我做到以下幾點:

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$")}) 

我應該怎麼做來查找產品,它的類完全匹配「產品項目」?

+0

我不認爲你可以用BeautifulSoup做你想做的事;而是用更多的類過濾掉任何標籤。 –

+0

我不確定我的理解。什麼應該包括'產品B',但不是'產品C'這是歸因於相同的? –

+0

@JoachimIsaksson對不起!我編輯了這個問題。它應該只返回產品A,而不是B/C/D – user2436815

回答

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>]