如何使用beautifulsoup为html嵌套标签定义findAll

时间:2011-02-07 19:05:55

标签: python html beautifulsoup

鉴于

<a href="www.example.com/"></a>

<table class="theclass">
<tr><td>
<a href="www.example.com/two">two</a>
</td></tr>
<tr><td>
<a href ="www.example.com/three">three</a>
<span>blabla<span>
</td></td>
</table>

我怎样才能刮掉table class =“the class”中的内容?我尝试使用

soup = util.mysoupopen(theexample) 
infoText = soup.findAll("table", {"class": "the class"})

但我不知道如何进一步定义发现声明。我试过的其他东西,是将findAll()的结果转换成数组。然后寻找针会出现的模式,但我找不到一致的模式。 感谢

2 个答案:

答案 0 :(得分:4)

如果我理解你的问题。这是应该工作的python代码。迭代查找class =“theclass”的所有表,然后在里面找到链接。

>>> foo = """<a href="www.example.com/"></a>
... <table class="theclass">
... <tr><td>
... <a href="www.example.com/two">two</a>
... </td></tr>
... <tr><td>
... <a href ="www.example.com/three">three</a>
... <span>blabla<span>
... </td></td>
... </table>
... """
>>> import BeautifulSoup as bs
>>> soup = bs.BeautifulSoup(foo)
>>> for table in soup.findAll('table', {'class':'theclass'} ):
...     links=table.findAll('a')
... 
>>> print links
[<a href="www.example.com/two">two</a>, <a href="www.example.com/three">three</a>]

答案 1 :(得分:2)

infoText是一个列表。你应该迭代它。

>>>for info in infoText:
>>>    print info.tr.td.a
<a href="www.example.com/two">two</a>

然后您可以访问<table>元素。如果您只是希望文档中有一个类“theclass”的表元素,soup.find("table", {"class": "the class"})会直接为您提供表格。