3

Web ページをスクレイピングするために、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」と「weite」を適切にテストするにはどうすればよいですか? 「... is None」が機能しないのはなぜですか?

4

3 に答える 3

10

「コンテンツ」には常に少なくとも 1 つの要素があると誰が言いましたか? 明らかに、「コンテンツ」に要素がないという状況に遭遇したため、このエラーが発生します。

より適切なチェックは次のようになります。

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 に答える