0

我正在编写一个 beautifulsoup/python 代码来从 html 表中抓取数据。表格的问题是某些列可能有空白数据(单元格为空)。当我运行此代码时,它第一次遇到表格中的空白单元格时,它会因“类型错误”而停止,并且我只得到输出直到该代码行。

下面的代码在第一次出现空单元格时停止并出现类型错误。

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,

注意 - 即使在上面遇到第三个单元格中的实际空白数据后它也会停止。

我究竟做错了什么?当单元格没有数据时,我基本上希望单元格输出为空白,否则输出应该是实际的单元格内容。

4

1 回答 1

1

TypeError可能是由.find_all(text=True)返回引起的None''.join(None)raises TypeError。检查 text 之前是否为 None 或为空''.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 回答