Python 通过删除Beautifulsoup中的空列来对齐列

Python 通过删除Beautifulsoup中的空列来对齐列,python,beautifulsoup,Python,Beautifulsoup,我有一个列不对齐的表,因为有些行包含随机的空单元格。我尝试了下面的方法,但不起作用。这个表应该有四列。有人能帮我吗 s=”(千美元)200820072006法定联邦所得税规定 汤=bs(s,“lxml”) table=soup.find_all('table')) 行_数据=[] 对于表中的行。find_all('tr'): cols=行。查找所有('td'): 如果str(列)中的“(”: column.decompose() 行数据追加(cols) 其他: 通过 检查单元格文本是否为空,然后

我有一个列不对齐的表,因为有些行包含随机的空单元格。我尝试了下面的方法,但不起作用。这个表应该有四列。有人能帮我吗

s=”

(千美元)2008

2007

2006

法定联邦所得税规定 汤=bs(s,“lxml”) table=soup.find_all('table')) 行_数据=[] 对于表中的行。find_all('tr'): cols=行。查找所有('td'): 如果str(列)中的“(”: column.decompose() 行数据追加(cols) 其他: 通过


检查单元格文本是否为空,然后进行分解

from bs4 import BeautifulSoup as bs

s = '<TABLE CELLSPACING=0 BORDER=0 WIDTH=672><TR><TD WIDTH="52%" VALIGN="BOTTOM" HEIGHT=19><FONT FACE="Akzidenz Grotesk BE" SIZE=1><P>(THOUSANDS OF DOLLARS)</FONT></TD><TD WIDTH="16%" VALIGN="BOTTOM" COLSPAN=2 HEIGHT=19><U><FONT FACE="Akzidenz Grotesk BE Bold" SIZE=2><P ALIGN="CENTER">2008</U></FONT></TD><TD WIDTH="16%" VALIGN="BOTTOM" COLSPAN=2 HEIGHT=19><U><FONT FACE="Akzidenz Grotesk BE" SIZE=2><P ALIGN="CENTER">2007</U></FONT></TD><TD WIDTH="16%" VALIGN="BOTTOM" COLSPAN=2 HEIGHT=19><U><FONT FACE="Akzidenz Grotesk BE" SIZE=2><P ALIGN="CENTER">2006</U></FONT></TD></TR><TR><TD WIDTH="52%" VALIGN="TOP" HEIGHT=15><FONT FACE="Akzidenz Grotesk BE" SIZE=2><P>Statutory Federal income tax provision</FONT></TD><TD WIDTH="12%" VALIGN="TOP" HEIGHT=15><FONT FACE="Akzidenz Grotesk BE Bold" SIZE=2><P ALIGN="RIGHT">$     969</FONT></TD><TD WIDTH="4%" VALIGN="TOP" HEIGHT=15><P></P></TD><TD WIDTH="12%" VALIGN="TOP" HEIGHT=15><FONT FACE="Akzidenz Grotesk BE" SIZE=2><P ALIGN="RIGHT">$  3,278</FONT></TD><TD WIDTH="4%" VALIGN="TOP" HEIGHT=15><P></P></TD><TD WIDTH="12%" VALIGN="TOP" HEIGHT=15><FONT FACE="Akzidenz Grotesk BE" SIZE=2><P ALIGN="RIGHT">$  1,521</FONT></TD><TD WIDTH="4%" VALIGN="TOP" HEIGHT=15><P></P></TD></TR></TABLE>'
soup=bs(s, "lxml")
table = soup.find('table')
row_data = []
for row in table.find_all('tr'):
  for cell in row.find_all('td'):
      if cell.text=='':
          cell.decompose()
print(soup)
当我看到
标签时,我只会使用Pandas
。阅读html()
并操纵数据帧。Pandas实际上在引擎盖下使用beautifulsoup

因此,使用pandas获取表。然后删除任何空值的列:

代码:

import pandas as pd

s = '<TABLE CELLSPACING=0 BORDER=0 WIDTH=672><TR><TD WIDTH="52%" VALIGN="BOTTOM" HEIGHT=19><FONT FACE="Akzidenz Grotesk BE" SIZE=1><P>(THOUSANDS OF DOLLARS)</FONT></TD><TD WIDTH="16%" VALIGN="BOTTOM" COLSPAN=2 HEIGHT=19><U><FONT FACE="Akzidenz Grotesk BE Bold" SIZE=2><P ALIGN="CENTER">2008</U></FONT></TD><TD WIDTH="16%" VALIGN="BOTTOM" COLSPAN=2 HEIGHT=19><U><FONT FACE="Akzidenz Grotesk BE" SIZE=2><P ALIGN="CENTER">2007</U></FONT></TD><TD WIDTH="16%" VALIGN="BOTTOM" COLSPAN=2 HEIGHT=19><U><FONT FACE="Akzidenz Grotesk BE" SIZE=2><P ALIGN="CENTER">2006</U></FONT></TD></TR><TR><TD WIDTH="52%" VALIGN="TOP" HEIGHT=15><FONT FACE="Akzidenz Grotesk BE" SIZE=2><P>Statutory Federal income tax provision</FONT></TD><TD WIDTH="12%" VALIGN="TOP" HEIGHT=15><FONT FACE="Akzidenz Grotesk BE Bold" SIZE=2><P ALIGN="RIGHT">$     969</FONT></TD><TD WIDTH="4%" VALIGN="TOP" HEIGHT=15><P></P></TD><TD WIDTH="12%" VALIGN="TOP" HEIGHT=15><FONT FACE="Akzidenz Grotesk BE" SIZE=2><P ALIGN="RIGHT">$  3,278</FONT></TD><TD WIDTH="4%" VALIGN="TOP" HEIGHT=15><P></P></TD><TD WIDTH="12%" VALIGN="TOP" HEIGHT=15><FONT FACE="Akzidenz Grotesk BE" SIZE=2><P ALIGN="RIGHT">$  1,521</FONT></TD><TD WIDTH="4%" VALIGN="TOP" HEIGHT=15><P></P></TD></TR></TABLE>'

table = pd.read_html(s)[0]
table = table.dropna(axis=1)
                                        0      1        3        5
0                  (THOUSANDS OF DOLLARS)   2008     2007     2006
1  Statutory Federal income tax provision  $ 969  $ 3,278  $ 1,521
您还可以更改列名等:

table.columns = table.iloc[0]
table = table[1:]

你能发布有效的代码吗?
cols=row.find_all('td'):
是一个语法错误。什么是
column.decompose()
                                        0      1        3        5
0                  (THOUSANDS OF DOLLARS)   2008     2007     2006
1  Statutory Federal income tax provision  $ 969  $ 3,278  $ 1,521
table.columns = table.iloc[0]
table = table[1:]