我正在使用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?为什么“......是无”不起作用?
答案 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 ...