im 尝试将带有 HTML 表格的文件转换为 CSV 格式。此文件的摘录如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1"><link rel="shortcut icon" href="favicon.ico" /><title>
Untitled Page
</title></head>
<body>
<form name="form1" method="post" action="mypricelist.aspx" id="form1">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/somethingrandom" />
<div>
<table id="price_list" border="0">
<tr>
<td>ProdCode</td><td>Description</td><td>Your Price</td>
</tr><tr>
<td>ab101</td><td>loruem</td><td>1.1</td>
</tr><tr>
<td>ab102</td><td>ipsum</td><td>0.1</td>
</tr><tr>
我试过使用
xls2csv -x -c; evprice.xls > evprice.csv
但这给了我一个错误说
evprice.xls is not OLE file or Error
我用谷歌搜索了一下。 它说这是因为文件不是正确的XLS,而只是html。
当我尝试时
file evprice.xls
它说它的HTML所以找到了一个"解决方案",使用libreOffice。
libreoffice --headless -convert-to csv ./evprice.xls
好吧,这不会给出错误,但是CSV输出文件很奇怪,就像在记事本中打开exe文件一样。
它包含了很多像这样的奇怪字符
—¬žþ9ü~ÆóXþK¢
有谁知道为什么会发生这种情况,并有一个可行的解决方案?
我构建了一个 Python 实用程序,它将 HTML 文件中的所有表转换为单独的 CSV 文件。
你可以在这里找到它。
剧本的关键是这样的:
from BeautifulSoup import BeautifulSoup
import csv
filename = "MY_HTML_FILE"
fin = open(filename,'r')
print "Opening file"
fin = fin.read()
print "Parsing file"
soup = BeautifulSoup(fin,convertEntities=BeautifulSoup.HTML_ENTITIES)
print "Preemptively removing unnecessary tags"
[s.extract() for s in soup('script')]
print "CSVing file"
tablecount = -1
for table in soup.findAll("table"):
tablecount += 1
print "Processing Table #%d" % (tablecount)
with open(sys.argv[1]+str(tablecount)+'.csv', 'wb') as csvfile:
fout = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
for row in table.findAll('tr'):
cols = row.findAll(['td','th'])
if cols:
cols = [x.text for x in cols]
fout.writerow(cols)