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

Raj*_*jan 3 perl project web-scraping

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

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

请建议我一些好的选择.

(这不是作业.想在Perl中做一些可以帮助我利用基本Perl功能的东西)

Sin*_*nür 10

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

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

  • 我总是试图通过直接观察它构建的HTTP请求和响应而不是执行或分析JS来跳过Javascript.来自AT&T的"Web Scraping Proxy"是反向工程网站的炸弹,它以WWW :: Mechanize Perl代码的形式记录流量来启动! (3认同)

msc*_*cha 8

用于Perl的最流行的Web抓取模块是WWW :: Mechanize,如果您不仅可以检索目标页面而且需要使用链接或表单导航到它,例如登录,那么这是非常好的.看看它的灵感的文件.如果您的需求很简单,您可以使用正则表达式从HTML中提取所需的信息(但要注意您的理智),否则最好使用HTML :: TreeBuilder等模块来完成工作.

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


Dav*_*ous 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";
        }
    });
Run Code Online (Sandbox Code Playgroud)

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";
    }
Run Code Online (Sandbox Code Playgroud)