2009-06-29 56 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