我有以下结构的网页:的Python美丽的汤怎么得到深层的嵌套元素
<div id ="a">
<table>
<td>
<!-- many tables and divs here -->
</td>
<td>
<table></table>
<table></table>
<div class="tabber">
<table></table>
<table></table> <!-- TARGET TABLE -->
</div>
</td>
</table>
</div>
这是正确的,遗憾的是没有ID或类目标或接近它除了“焊接设备”。
我试图让该div元素:
content = urllib2.urlopen(url).read()
soup = BeautifulSoup(content)
stats_div = soup.findAll('div', class_ = "tabber")[1] # 1 because there are 4 elements on page with that class and number 2 is the target one
但它没有工作,总是什么也不输出。
我试图从一开始遍历整个树来获得目标表:
stats_table = soup.find(id='a').findChildren('table')[0].findChildren('td')[1].findChildren('div')[0].findChildren('table')[1]
但它也不起作用。显然findChildren('td')
没有得到第一桌的直接子女,而是获得所有的后代。超过100个td元素。
如何获得元素的直接子元素?
有没有更简单的方法来遍历这样一个丑陋的嵌套树? 为什么我不能按类选择div
?它会简化一切。
你是什么意思*它没有工作*?如果页面中没有这样的div,你会得到*错误*。 – 2015-03-19 12:05:31
@MartijnPieters我收到一个空的列表。我可以得到其他类很好,但这个不起作用。在页面中,类是“tabberlive”,当我尝试获得它时,我得到:http://i.gyazo.com/ab3ceaf1f9250795456d625c7c388960.png – Euphe 2015-03-19 12:14:17
然后在结果汤树中没有这样的元素。这可能有多种原因;向您提供的HTML可能根本就没有那个类(服务器可能根据请求标题改变了响应,或者页面在浏览器中使用脚本进行了更改),或者HTML被破坏,您的解析器没有按照方式修复它你的浏览器(在这种情况下使用不同的解析器)。 – 2015-03-19 12:20:29