2009-06-29 36 views

回答

19

按照該文檔,您首先進行一個解析樹:

import BeautifulSoup 
html = "<html><body><tr><td><a href='foo'/></td></tr></body></html>" 
soup = BeautifulSoup.BeautifulSoup(html) 

,然後你在它可以搜索,例如用於<a>標籤,其母公司爲一個<td>

for ana in soup.findAll('a'): 
    if ana.parent.name == 'td': 
    print ana["href"] 
19

像這樣的事情?

from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup(html) 
anchors = [td.find('a') for td in soup.findAll('td')] 

這應該在您提供的html的每個「td」中找到第一個「a」。你可以調整td.find以更具體,或者如果你在每個td內有幾個鏈接,則使用findAll

UPDATE:重新丹尼爾的評論,如果你想確保你沒有任何None的列表中,那麼你可以這樣修改列表理解:

from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup(html) 
anchors = [a for a in (td.find('a') for td in soup.findAll('td')) if a] 

這基本上只是增加了一個檢查是否有實際的元素返回td.find('a')

+0

這是非常聰明!但是如果'a'不存在,它將包括None到錨列表中?我怎麼才能填充錨點列表只有實際的'a的Nones跳動? – 2013-04-25 03:41:58

+1

好吧,我已經更新了這個問題,以處理從列表中刪除無。 – 2013-04-25 10:09:44