3

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

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

我希望获取 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

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

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

注意-我正在使用 beautifulsoup。

如何测试“no-content-td”并适当地加注?为什么“... is None”不起作用?

4

3 回答 3

10

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

更合适的检查是:

if each_td.contents:

或者

if len(each_td.contents) > 0:

但你的假设是错误的。

于 2012-09-09T06:24:27.813 回答
5

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

row = [] 
for each_td in td:
    row.append(each_td.text)
print row
于 2012-09-09T06:20:17.353 回答
0

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

try:
  row.append(each_td.contents[0])
except IndexError:
  //do what is required if it is empty ...
于 2012-09-09T06:27:23.767 回答