【问题标题】:Splitting data parsed by Beautifulsoup into csv columns将 Beautifulsoup 解析的数据拆分为 csv 列
【发布时间】:2017-04-18 14:44:11
【问题描述】:
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 个值中的每一个都包含在单独的列中。我在这里做错了什么?

【问题讨论】:

标签: python-3.x csv beautifulsoup


【解决方案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)

【讨论】:

  • 它确实需要newline='',否则它会跳过行之间的一行,但直接传递给writer.writerows() 可以按需要工作。感谢您提供的简单解决方案,我应该先尝试一下。
猜你喜欢
  • 2016-12-15
  • 2015-02-05
  • 2016-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-20
  • 2019-10-28
相关资源
最近更新 更多