排序html表内容的最简单方法

时间:2013-07-13 02:19:00

标签: html-parsing

鉴于来自http://packdeps.haskellers.com/reverse的内容,表示按第二列排序的此表内容的最简单方法是什么?哪种工具最适合这种工作?

由于内容看起来很简单,我试图破解tr,sed和awk(主要是为了学习工具),但事实证明它太复杂了,无法使所有行正确。格式可能如下所示:

47 strict
54 Win32
55 transformers-base
57 enumerator
68 system-filepath
69 xml

或任何其他格式,只要它不会使进一步处理太复杂。

2 个答案:

答案 0 :(得分:0)

Javascript包含本机排序功能,因此Javascript是一种自然的选择。

这里有一个简单的脚本,您可以使用或查看和学习:

http://www.allmyscripts.com/Table_Sort/

答案 1 :(得分:0)

我喜欢,只是为了学习我使用Web::Scraper模块完成了这项工作。它使用CSS选择器来提取表的两列,并通过第二列对它们进行排序,这表示每个包的依赖关系数:

script.pl文件:

#!/usr/bin/env perl

use strict;
use warnings;
use Web::Scraper;
use URI;

die qq|Usage: perl $0 <url>\n| unless @ARGV == 1;

my $packages_deps = scraper {
        process 'tr', 'package_deps[]' => scraper {
                process 'td:first-child > a', 'package_name' => 'TEXT';
                process 'td:nth-child(2)', 'tot_deps' => 'TEXT';
        };  
        result 'package_deps';
};

my $response = $packages_deps->scrape( URI->new( shift ) );
for ( sort { $a->{tot_deps} <=> $b->{tot_deps} } @$response[1..$#$response] ) { 
        printf qq|%d %s\n|, $_->{tot_deps}, $_->{package_name};
}

运行它提供网址:

perl script.pl "http://packdeps.haskellers.com/reverse"

它产生(仅显示列表的开头和结尾部分):

1 abstract-par-accelerate
1 accelerate-fft
1 acme-year
1 action-permutations
1 active
1 activehs-base
...
766 text
794 filepath
796 transformers
915 directory
1467 mtl
1741 bytestring
1857 containers
5287 base