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:]