测试没有beautifulsoup python内容的标签

时间:2012-09-09 06:17:13

标签: python beautifulsoup

我正在使用Python中的BeautifulSoup来抓取网页。问题中的html如下所示:

<td><a href="blah.html>blahblah</a></td>
<td>line2</td>
<td></td>

我希望获取td标签的内容。所以对于第一个td,我需要“blahblah”文本,而对于下一个td,我想写“line2”而对于最后一个td,“blank”因为没有内容。

我的代码段看起来像这样 -

row = [] 
for each_td in td:                        
    link = each_td.find_all('a')                                                
    if link:
        row.append(link[0].contents[0])
        row.append(link[0]['href'])
    elif each_td.contents[0] is None:
        row.append('blank')                
    else:
        row.append(each_td.contents[0])
print row

但是在跑步时,我收到错误 -

elif each_td.contents[0] is None:
IndexError: list index out of range

注意 - 我正在使用beautifulsoup。

如何测试“no-content-td”和weite?为什么“......是无”不起作用?

3 个答案:

答案 0 :(得分:7)

谁说'内容'总是至少有一个元素?显然你遇到'内容'没有元素的情况,因此你会出现这个错误。

更合适的检查是:

if each_td.contents:

if len(each_td.contents) > 0:

但你的假设是错的。

答案 1 :(得分:5)

您可以使用.text来获取文字。

row = [] 
for each_td in td:
    row.append(each_td.text)
print row

答案 2 :(得分:-1)

您可以处理异常。以下是代码

try:
  row.append(each_td.contents[0])
except IndexError:
  //do what is required if it is empty ...