如何在美丽的汤中获得嵌套元素

时间:2009-06-29 14:22:55

标签: python beautifulsoup

我正在努力获取在td中获取一些href所需的语法。 table,tr和td元素没有任何类或id。

如果我想在这个例子中抓住锚点,我需要什么?

< tr>     < td> < a> ...

由于

2 个答案:

答案 0 :(得分:24)

根据文档,您首先要创建一个解析树:

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

答案 1 :(得分:22)

这样的东西?

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

那应该在你提供的html中的每个“td”中找到第一个“a”。您可以调整td.find更具体,或者如果每个td中有多个链接,则使用findAll

更新:Daniele的评论,如果你想确保列表中没有任何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')返回的实际元素。