【问题标题】:Taking the text output when table cell value is blank in python beautifulsouppython beautifulsoup中表格单元格值为空白时获取文本输出
【发布时间】:2012-09-04 04:29:29
【问题描述】:

我正在编写一个 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,

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

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

【问题讨论】:

  • 提供代码数据,以可重现的方式实际显示此错误。我们不得构建自己的 HTML 测试数据来检查您的代码。
  • @esaelPsnoroMoN - 我已经更新了输出。
  • 我明确要求提供可重现的代码示例。提供一个我可以直接复制粘贴运行的代码段。

标签: python beautifulsoup html-table


【解决方案1】:

TypeError 可能是由 .find_all(text=True) 返回 None 引起的:''.join(None) 引发 TypeError。检查''.join之前的文本是否为None或为空:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    相关资源
    最近更新 更多