以编程方式从一堆网页中提取结构化数据的最简单方法是什么?

时间:2009-12-18 19:42:12

标签: c# java flex perl air

以编程方式从一堆网页中提取结构化数据的最简单方法是什么?

我目前正在使用我编写的Adobe AIR程序来跟踪一页上的链接,并从后续页面中获取一部分数据。这实际上工作正常,对程序员而言,我认为这(或其他语言)提供了一种合理的方法,可以根据具体情况编写。也许有一种特定的语言或库允许程序员很快地完成这项工作,如果是这样,我会有兴趣知道它们是什么。

还有哪些工具可以让非程序员(如客户支持代表或负责数据采集的人)从网页中提取结构化数据而无需进行大量复制和粘贴?

6 个答案:

答案 0 :(得分:11)

如果您在Stackoverflow上搜索WWW::Mechanize& pQuery您将看到许多使用这些Perl CPAN模块的示例。

但是因为你提到了“非程序员”,那么也许Web::Scraper CPAN模块可能更合适?它更像DSL喜欢,因此“非程序员”可能更容易接受。

以下是从Twitter检索推文的文档中的示例:

use URI;
use Web::Scraper;

my $tweets = scraper {
    process "li.status", "tweets[]" => scraper {
        process ".entry-content",    body => 'TEXT';
        process ".entry-date",       when => 'TEXT';
        process 'a[rel="bookmark"]', link => '@href';
    };
};

my $res = $tweets->scrape( URI->new("http://twitter.com/miyagawa") );

for my $tweet (@{$res->{tweets}}) {
    print "$tweet->{body} $tweet->{when} (link: $tweet->{link})\n";
}

答案 1 :(得分:2)

我发现YQL对于这类事情非常强大和有用。您可以从互联网上选择任何网页,它将使其有效,然后允许您使用XPATH查询其中的部分。您可以将其输出为XML或JSON,以便加载到另一个脚本/应用程序中。

我在这里写了我的第一个实验:

http://www.kelvinluck.com/2009/02/data-scraping-with-yql-and-jquery/

从那时起,YQL通过添加EXECUTE关键字变得更加强大,它允许您在javascript中编写自己的逻辑并在将数据返回给您之前在Yahoo!s服务器上运行。

更详细的YQL写法是here

您可以为YQL创建一个数据表,以了解您尝试获取的信息的基础知识,然后负责数据采集的人员可以针对该表编写非常简单的查询(在相当英语的DSL中)。对他们来说比“适当的编程”更容易......

答案 2 :(得分:2)

Sprog,它允许您以图形方式构建部分流程(获取URL - >处理HTML表 - >写入文件),您可以将Perl代码放在流程的任何阶段,或者为非程序员使用编写自己的部件。它看起来有点遗弃,但仍然运作良好。

答案 3 :(得分:0)

我使用Ruby与hpricot的组合,watir可以非常有效地完成工作

答案 4 :(得分:0)

如果你不介意它接管你的计算机,并且你碰巧需要javasript支持,WatiN是一个非常好的浏览工具。用C#编写,它在过去对我来说非常可靠,提供了一个很好的独立于浏览器的包装器,用于从页面运行和获取文本。

答案 5 :(得分:0)

商业工具是否可行?如果是这样,请查看http://screen-scraper.com/,它非常容易设置并用于抓取网站。他们有免费版本,实际上相当完整。不,我不隶属于公司:)

相关问题