2017-04-18 35 views
0
table = soup.find('table', attrs={'id':'MainContent_grdUsers2'}) 
data = [] 

for tr in table.find_all('tr')[1:] : 
    td = tr.find_all('td') 
    try : 
     data += [ 
      [ 
       td[0].getText() , 
       td[2].find('option', {'selected':'selected'}).getText(), 
       td[3].find('option', {'selected':'selected'}).getText(), 
       td[4].find('input').get('value'), 
       td[5].find('input').get('value'), 
       td[6].find('option', {'selected':'selected'}).getText() 
      ] 
     ] 
    except Exception as ex : 
     print(ex) 
     continue 


with open('test5.csv', 'w', newline='') as outfile: 
    writer = csv.writer(outfile) 
    for row in data : 
     writer.writerow([' '.join(str(r) for r in row)]) 

我想将一个复杂的html表格解析为csv。此代码工作并获取所需的数据,但每行包含在一个单元中,而不是每行6个值中的每一个的单独列。我在这里做错了什么?将由Beautifulsoup解析的数据拆分为csv列

+0

如果可能的话,包含输入数据的样本总是一个好主意。我假设您使用的是http://stackoverflow.com/q/43396370/2997179中的相同数据? –

回答

1

您不必要地设置newline=''并将空格连接到表格单元格。您的数据似乎是以合适的格式直接传递给writer.writerows()

with open('test5.csv', 'w') as outfile: 
    writer = csv.writer(outfile) 
    header = ['Name', 'Rights', 'Bureaus', 'FullName', 'Email', 'Status'] 
    writer.writerow(header) 
    writer.writerows(data) 
+0

它确实需要'newline ='''否则它会在行之间跳过一行,但直接传递给'writer.writerows()'按需要工作。感谢您的简单解决方案,我应该先尝试一下。 – nvachhan