如何开始使用Perl进行网页抓取?

时间:2011-02-01 10:17:19

标签: perl project web-scraping

我有兴趣学习Perl。我正在使用Learning Perl书籍和cpan的网站作为参考。

我期待使用Perl做一些网络/文本抓取应用程序来应用我学到的任何内容。

请建议我一些好的选择。

(这不是作业。想在Perl中做些什么来帮助我利用基本的Perl功能)

5 个答案:

答案 0 :(得分:10)

如果要抓取的网页需要JavaScript才能正常运行,那么您需要的内容超过WWW::Mechanize可以提供的内容。您甚至可能不得不求助于通过Perl控制特定浏览器(例如使用Win32::IE::MechanizeWWW::Mechanize::Firefox)。

我还没有尝试过,但WWW::Scripter插件还有WWW::Scripter::Plugin::JavaScript

答案 1 :(得分:8)

Perl最受欢迎的网络抓取模块是WWW::Mechanize,如果您不仅可以检索目标网页,而且需要使用链接或表单导航到它,例如登录,那么这是非常好的。看一下documentation的灵感。 如果您的需求很简单,您可以使用正则表达式从HTML中提取所需的信息(但要注意您的sanity),否则最好使用HTML::TreeBuilder等模块来完成工作

一个看似有趣的模块,但我还没有尝试过,WWW::Scripter。它是WWW :: Mechanize的子类,但支持Javascript和AJAX,还集成了HTML::DOM,这是从页面中提取信息的另一种方式。

答案 2 :(得分:8)

正如其他人所说,WWW::Mechanize是用于网络抓取任务的优秀模块;你会很好地学习如何使用它,它可以使常见的任务变得非常容易。我已经将它用于几个网络抓取任务,它只是处理所有无聊的东西 - “到这里,找到这个文本的链接并按照它,现在找到一个名为'username'和'password'字段的表单,输入这些值并提交表格......“。

Scrappy也值得一看 - 它可以让你用非常少的代码做很多事情 - 来自其文档的一个例子:


    my $spidy = Scrappy->new;

    $spidy->crawl('http://search.cpan.org/recent', {
        '#cpansearch li a' => sub {
            print shift->text, "\n";
        }
    });

Scrappy使用了引擎盖下的Web::Scraper,您可能也希望将其作为另一种选择。

此外,如果您需要从HTML表中提取数据,HTML::TableExtract使这很容易 - 您可以通过命名它包含的标题找到您感兴趣的表,并且非常容易地提取数据,例如:


    use HTML::TableExtract;
    $te = HTML::TableExtract->new( headers => [qw(Date Price Cost)] );
    $te->parse($html_string) or die "Didn't find table";
    foreach $row ($te->rows) {
        print join(',', @$row), "\n";
    }

答案 3 :(得分:2)

尝试使用Web-Scraper Perl模块。一个beginners tutorial can be found here

安全,易用且快速。

答案 4 :(得分:1)

您可能还想查看我在Java HtmlUnit上的新Perl包装器。它非常容易使用,例如看一下快速教程:

http://code.google.com/p/spidey/wiki/QuickTutorial

明天我将发布一些详细的安装说明和第一个版本。 与Mechanize相似,你得到一些JavaScript支持,它比屏幕抓取更快,内存要求更低。