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

joe*_*our 18 python beautifulsoup

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

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

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

谢谢

Ale*_*lli 27

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

import BeautifulSoup
html = "<html><body><tr><td><a href='foo'/></td></tr></body></html>"
soup = BeautifulSoup.BeautifulSoup(html)
Run Code Online (Sandbox Code Playgroud)

然后在其中搜索,例如对于<a>其直接父级为的标签<td>:

for ana in soup.findAll('a'):
  if ana.parent.name == 'td':
    print ana["href"]
Run Code Online (Sandbox Code Playgroud)

  • @Greyshack,对我来说很好(当然使用当前版本,在原始post-pip安装beautifulsoup4后6年多,当然模块名称现在是bs4) - 根据需要打印'foo'.当然,基于对您的问题的描述含糊不清,作为"不[sic]工作",您无法提供任何帮助! - ) (3认同)

Joh*_*ery 24

像这样的东西?

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
anchors = [td.find('a') for td in soup.findAll('td')]
Run Code Online (Sandbox Code Playgroud)

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

更新: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]
Run Code Online (Sandbox Code Playgroud)

这基本上只是添加一个检查,看看你是否有一个返回的实际元素td.find('a').