如何将HTML表格(<table>
)的内容转换为CSV格式?是否有库或Linux程序可以实现此功能?这类似于在Internet Explorer中复制表格,并将其粘贴到Excel中。
如何将HTML表格(<table>
)的内容转换为CSV格式?是否有库或Linux程序可以实现此功能?这类似于在Internet Explorer中复制表格,并将其粘贴到Excel中。
使用LibreOffice Calc的"无界面模式":
localc --headless --infilter="HTML (StarCalc)" --convert-to "csv:Text - txt - csv (StarCalc):44,34,76" input.html
man libreoffice
以了解libreoffice
shell脚本(localc
,lodraw
,loimpress
,lowriter
等)的选项。CSV
和 nokogiri
输出为 .csv
文件。基于 @audiodude's answer 的代码,但进行以下修改:
CSV
内置库将一个 Array
转换成 CSV 行。.csv
文件,而不仅仅是打印到 STDOUT
。th
) 和表格主体 (td
)。# Convert HTML table to CSV format.
require "nokogiri"
html_file_path = ""
html_string = File.read( html_file_path )
doc = Nokogiri::HTML( html_string )
CSV.open( Rails.root.join( Time.zone.now.to_s( :file ) + ".csv" ), "wb" ) do |csv|
doc.xpath( "//table//tr" ).each do |row|
csv << row.xpath( "th|td" ).collect( &:text ).collect( &:strip )
end
end
考虑到:
我们可以要求一个脚本,接受一个URI并将每个HTML表格转换为CSV。为此,我建议使用XPath和您选择的任何实现其API的编程语言。
以下是调用PHP脚本的Bash脚本(请注意第一行的#!/usr/bin/env php
)。
#!/usr/bin/env php
<?php
$input_file = $argv[1];
$html_string = file_get_contents($input_file)
or exit("Ops! unable to open file: ($input_file)");
$dom = new DOMDocument();
//@$dom->loadHTMLFile( $input_file );
@$dom->loadHTML($html_string);
$xpath = new DOMXPath($dom);
$base_name = basename($input_file, ".html");
$tables = $dom->getElementsByTagName('table');
for ($i=0, $n = $tables->length; $i < $n; ++$i) {
$file_csv = fopen("{$base_name}_table_".($i+1).".csv", 'w');
$rows = $xpath->query(".//tr", $tables->item($i));
foreach ($rows as $row) {
$arr = array();
$cells = $xpath->query("td|th", $row);
foreach ($cells as $cell) {
$arr[] = trim($cell->textContent);
}
fputcsv($file_csv, $arr);
unset($arr);
} //rows
fclose($file_csv);
} //tables
?>
将脚本保存为html2csv
并授予执行权限:
$ chmod +x html2csv
输入 ./html2csv URL
或 ./html2csv file.html