如何将HTML表格转换为CSV?

74

如何将HTML表格(<table>)的内容转换为CSV格式?是否有库或Linux程序可以实现此功能?这类似于在Internet Explorer中复制表格,并将其粘贴到Excel中。


23个回答

0

使用LibreOffice Calc"无界面模式"

localc --headless --infilter="HTML (StarCalc)" --convert-to "csv:Text - txt - csv (StarCalc):44,34,76" input.html

0

读取 HTML 文件并使用 Ruby 的 CSVnokogiri 输出为 .csv 文件。

基于 @audiodude's answer 的代码,但进行以下修改:

  • 从文件中读取 HTML。对于长的 HTML 表格来说非常方便,但如果你的 HTML 表格很小,也可以轻松修改为静态字符串。
  • 使用 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

0

从Web或本地文件读取HTML,并将每个HTML表格转换为CSV

考虑到:

  • 通常HTML源位于Web上
  • 经常,一个网页包含许多表格

我们可以要求一个脚本,接受一个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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接