使用beautifulSoup获取除第一个标签之外的所有标签

时间:2014-10-14 06:24:30

标签: python web-scraping beautifulsoup

我有这样的html结构:

<table><tr><p>Hello1</p></tr><tr><p>Shirt</p></tr></table>
<table><tr><p>Hello2</p></tr><tr><p>Jeans</p></tr><tr><p>Jacket</p></tr></table>
<table><tr><p>Hello3</p></tr><tr><p>Trouser</p></tr></table>

我要获取除每个表中第一个tr标记之外的所有表中的所有tr个标记。

输出应该是:

Shirt
Jeans
Jacket
Trouser

我目前的代码是:

soup = BeautifulSoup(data)
n = soup.findAll('table')

for tr in n:
    t = tr.findAll('tr')[1].findAll('span')
    for p in t:
        print(p.text)

1 个答案:

答案 0 :(得分:2)

上面代码的一个问题是,您只获得带有tr索引的第二个[1]。相反,你想要使用的是拼接[1:],它在第一个之后得到所有东西。另外,要获取文本,请使用find(text=True)而不是获取范围。请参阅下面的解决方案:

import BeautifulSoup
n = BeautifulSoup.BeautifulSoup(data)
for table in n.findAll('table'):
    for tr in table.findAll('tr')[1:]:
        print tr.find(text=True)

注意:以上在换行符上打印对象,而您的输出表明它们应该在一个单独的行上。这应该是一个微不足道的变化。