测试没有beautifulsoup python内容的标签

use*_*208 3 python beautifulsoup

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

<td><a href="blah.html>blahblah</a></td>
<td>line2</td>
<td></td>
Run Code Online (Sandbox Code Playgroud)

我想采取td标签的内容.所以对于第一个td,我需要"blahblah"文本,对于下一个td,我想写"line2",而对于最后一个td,"空白",因为没有内容.

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

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
Run Code Online (Sandbox Code Playgroud)

但是在运行时,我得到错误 -

elif each_td.contents[0] is None:
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)

请注意 - 我正在使用beautifulsoup.

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

小智 8

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

更合适的检查是:

if each_td.contents:
Run Code Online (Sandbox Code Playgroud)

要么

if len(each_td.contents) > 0:
Run Code Online (Sandbox Code Playgroud)

但是你的假设是错误的.


060*_*002 5

您可以使用它.text来获取文本.

row = [] 
for each_td in td:
    row.append(each_td.text)
print row
Run Code Online (Sandbox Code Playgroud)