0

HTMLテーブルからデータをスクレイピングするためのbeautifulsoup/pythonコードを書いています。テーブルの問題は、特定の列に空白のデータがある (セルが空である) ことです。このコードを実行すると、最初にテーブル内の空白セルに遭遇すると、「型エラー」で停止し、そのコード行までしか出力されません。

以下の CODE は、空のセルが最初に発生したときに型エラーで停止します。

for tr in rows:
  cols = tr.findAll('td')
  for td in cols:
      text = ''.join(td.find(text=True))
  print

上記のコードの出力例 -

A,  123,  c,  d,  6,  0,  KK, G,
V,  21,  b,  e,  6,  5,  kk, g,
M,  1,  a,  f,  7,  5,  BB, 

上記の出力の最後の行では、最後の値 (BB) の後にデータがないことに注意してください。これは、テーブルに空白のセルがあり、その結果、これだけ出力した後に python が実行を停止するためです。

修正してみましたが、すでにデータが入っている特定のセルに空白が入り続けます。

更新されたコード:

for tr in rows:
  cols = tr.findAll('td')
  for td in cols:

      if td.find(text=''):
          text = ''.join('blank')
      else:
          text = ''.join(td.find(text=True))
      print text + ", ",
   print

上記コードの出力例 -

blank,  123,  c,  d,  6,  0,  blank, blank,
blank,  21,  b,  e,  6,  5,  blank, blank,
blank,  1,  a,  f,  7,  5,  blank,

注-上記でも、3番目のセルで実際の空白データに遭遇した後に停止します。

私は何を間違っていますか?基本的に、セルにデータがない場合はセルの出力を空白にしたいのですが、それ以外の場合は、実際のセルの内容を出力する必要があります。

4

1 に答える 1

1

: raises を返すTypeErrorことが原因である可能性があります。次の前に、テキストが None または空でないことを確認します。.find_all(text=True)None''.join(None)TypeError''.join

import csv
import sys
from bs4 import BeautifulSoup # pip install beautifulsoup4

csv_writer = csv.writer(sys.stdout)
soup = BeautifulSoup(html)
for tr in soup(id='your_table')('tr', recursive=False):
    row = []
    for td in tr('td', recursive=False):
        text = td(text=True)
        row.append(''.join(text) if text else 'blank')
    csv_writer.writerow(row)
于 2012-09-04T06:01:45.163 に答える