2015-02-08 56 views
0

新來網絡抓取在這裏。我成功地颳了一個網站,但我遇到了一個問題。在文章類中,通常只有一個'p'標籤,但有時在文章類中隨機出現兩個或三個帶有一些不相關文本的'p'標籤。我想總是標記會出現這樣的:BeautifulSoup webscrape,用隨機的html類隔離特定的標籤

<p onclick="window.location.href = 'https://www.blahblah.com/somenumbers'"> 
some blah blah text 
</p> 

而其他隨機出現的「P」標籤只顯示爲

<p> irrelevant text </p> 

問題是我不知道如何抓住只有「P onclick「標籤,因爲雖然網站總是相同的,但」有些數字「位總是變化的。我只需要'p onclick'標籤中的等等文字。此刻,我正在從p標籤中獲取所有文本,因此對於大多數信息,我獲得了所需的文本,但隨後出現隨機p標籤時,我也刮掉了不相關的文本。它們也以隨機順序出現,所以使用「內容」不起作用。

我嘗試過soup.findAll的各種組合,但那些讓我感到困惑的東西是那些改變網站號碼的東西。任何人都可以提供解決方案嗎?

在此先感謝。

維克

回答

0

你可以指定find_all的標籤必須有一個非空onclick屬性正則表達式,examples在該文檔中給出。

對於您的情況:

>>> from bs4 import BeautifulSoup 
>>> import re 
>>> 
>>> soup = BeautifulSoup('<p> blabla</p> and <p onclick="js action">blabla</p>') 
>>> soup.find_all('p', onclick=re.compile('.')) 
[<p onclick="js action">blabla</p>] 
+0

謝謝你,這工作完美! – TopGangMember 2015-02-08 16:21:54

0

我知道這是舊的,但我發現它在尋找的東西...

如果你是開心的列表,而不是一個迭代器,你也可以使用CSS選擇器做到這一點(並稍微「簡單」)

plist = soup.select('p[onclick]')