以编程方式从一堆网页中提取结构化数据的最简单方法是什么?
我目前正在使用我编写的Adobe AIR程序来跟踪一页上的链接,并从后续页面中获取一部分数据。这实际上工作正常,对程序员而言,我认为这(或其他语言)提供了一种合理的方法,可以根据具体情况编写。也许有一种特定的语言或库允许程序员很快地完成这项工作,如果是这样,我会有兴趣知道它们是什么。
还有哪些工具可以让非程序员(如客户支持代表或负责数据采集的人)从网页中提取结构化数据而无需进行大量复制和粘贴?
答案 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)
答案 4 :(得分:0)
如果你不介意它接管你的计算机,并且你碰巧需要javasript支持,WatiN是一个非常好的浏览工具。用C#编写,它在过去对我来说非常可靠,提供了一个很好的独立于浏览器的包装器,用于从页面运行和获取文本。
答案 5 :(得分:0)
商业工具是否可行?如果是这样,请查看http://screen-scraper.com/,它非常容易设置并用于抓取网站。他们有免费版本,实际上相当完整。不,我不隶属于公司:)