如何在Beautiful Soup中获取嵌套元素
我在抓取一些在 <td>
标签里的 hrefs 时遇到了困难。这个 <table>
、<tr>
和 <td>
标签都没有任何类名或ID。
如果我想在这个例子中抓取 链接,我需要做些什么呢?
<tr>
<td><a>...
谢谢。
2 个回答
32
像这样吗?
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')
是否返回了一个实际的元素。
35
根据文档的说明,首先你需要创建一个解析树:
import BeautifulSoup
html = "<html><body><tr><td><a href='foo'/></td></tr></body></html>"
soup = BeautifulSoup.BeautifulSoup(html)
然后你可以在这个解析树中进行搜索,比如查找那些直接父元素是 <td>
的 <a>
标签:
for ana in soup.findAll('a'):
if ana.parent.name == 'td':
print ana["href"]