【发布时间】:2010-11-06 17:07:43
【问题描述】:
标签: python beautifulsoup
标签: python beautifulsoup
这样的?
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') 返回的实际元素。
【讨论】:
根据文档,您首先制作一个解析树:
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"]
【讨论】: