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

如何开始使用Perl进行网页抓取?,perl,project,web-scraping,Perl,Project,Web Scraping,我对学习Perl很感兴趣。我正在使用学习Perl的书籍和cpan的网站作为参考 我期待着使用Perl做一些web/文本抓取应用程序来应用我所学的知识 请先给我推荐一些好的选择 (这不是一个家庭作业。想用Perl做点什么来帮助我利用Perl的基本功能)Perl最流行的web抓取模块是,如果您不能仅检索目标页面,而是需要使用链接或表单导航到目标页面,例如,登录,这是非常好的。看看它的灵感。 如果您的需求很简单,那么您可以使用正则表达式从HTML中提取所需的信息(但要小心),否则最好使用诸如之类的模块

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

我期待着使用Perl做一些web/文本抓取应用程序来应用我所学的知识

请先给我推荐一些好的选择


(这不是一个家庭作业。想用Perl做点什么来帮助我利用Perl的基本功能)

Perl最流行的web抓取模块是,如果您不能仅检索目标页面,而是需要使用链接或表单导航到目标页面,例如,登录,这是非常好的。看看它的灵感。 如果您的需求很简单,那么您可以使用正则表达式从HTML中提取所需的信息(但要小心),否则最好使用诸如之类的模块来完成这项工作


一个看起来很有趣,但我还没有真正尝试过的模块是。它是WWW::Mechanize的一个子类,但支持Javascript和AJAX,还集成了另一种从页面中提取信息的方法。

如果您想要抓取的网页需要Javascript才能正常运行,那么您需要的将不仅仅是提供给您的功能。您甚至可能不得不求助于通过Perl控制特定的浏览器(例如,使用或)

我还没有试过,但插件也有。

正如其他人所说,是一个用于抓取网页任务的优秀模块;你最好学会如何使用它,它可以使普通任务变得非常简单。我已经用它完成了几个网页抓取任务,它只是处理了所有无聊的事情——“到这里,找到一个与此文本相关的链接,然后按照它进行操作,现在找到一个名为‘用户名’和‘密码’的表单,输入这些值并提交表单……”

也非常值得一看-它让您可以用很少的代码做很多事情-文档中的一个示例:


    my $spidy = Scrappy->new;

    $spidy->crawl('http://search.cpan.org/recent', {
        '#cpansearch li a' => sub {
            print shift->text, "\n";
        }
    });
刮痧利用了引擎盖下,你可能也想把它作为另一种选择

此外,如果您需要从HTML表格中提取数据,这将非常容易-您可以通过命名表格包含的标题来定位您感兴趣的表格,并非常容易地提取数据,例如:


    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";
    }

尝试Web模块。A


它安全、易用且快速。

您可能还想看看我新的基于Java HtmlUnit的Perl包装器。它非常易于使用,例如,请查看此处的快速教程:

到明天,我将发布一些详细的安装说明和第一个版本。
与Mechanize和类似软件不同,您可以获得一些JavaScript支持,它比屏幕抓取更快,占用内存更少。

许多人的想法正好相反@乔:多么愚蠢的评论。在乔的辩护中,这是因为标题中的“拼凑”拼写错误(现已更正)。然而,没完没了的对perl的抨击确实让人厌烦(谢天谢地,最近似乎少了这么多)。@plusplus我经常在与其他语言相关的问题中看到有趣的拼写错误,但出于某种原因,我不想对这些语言说些讽刺的话。我发现有趣的是,有相当多的人“Perl必须很糟糕”,他们才能对自己选择的编程语言感到满意。另见:伙计们,你们不能开个玩笑吗?是的,如果你看看历史,你会发现原来的问题是“报废”.+1应该提到的是,
WWW::Mechanize
提供了使用链接和表单导航所需的解析。我总是试图通过直接观察它生成的HTTP请求和响应而不是执行或分析JS来跳过Javascript。AT&T的“Web Scraping Proxy”是反向工程网站的炸弹,它以WWW::Mechanize Perl代码的形式记录流量以启动@当然可以,但在很多情况下,控制Internet Explorer(通过
Win32::OLE
)直接为我节省了大量时间。