2012-09-04 93 views
0

我正在写一个漂亮的/ python代码从html表格中刮取数据。该表的问题是某些列可能有空白数据(单元格为空)。当我运行这段代码时,第一次遇到表格中的一个空白单元格时,它停止了一个“类型错误”,并且直到该代码行才得到输出。当python漂亮的表格单元格值为空时取文本输出

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

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, 

注意 - 即使在第三小区遇到的实际空白数据后它上面停止。

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

+0

提供代码*和*数据实际上在可再现的方式显示这个错误。我们不能建立自己的HTML测试数据来检查你的代码。 –

+0

@esaelPsnoroMoN - 我已经更新了输出。 – user1644208

+0

我明确要求提供可重现的代码示例。提供一个代码段,我可以直接复制和粘贴并运行。 –

回答

1

TypeError可能通过.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) 
相关问题