如何使用Perl屏幕刮擦?

时间:2009-04-03 13:07:38

标签: perl screen-scraping

我需要显示一些存储在网站中的值,因为我需要抓取网站并从表中获取内容。有什么想法吗?

10 个答案:

答案 0 :(得分:6)

如果您熟悉jQuery,可能需要查看pQuery,这样可以轻松实现:

## print every <h2> tag in page
use pQuery;

pQuery("http://google.com/search?q=pquery")
    ->find("h2")
    ->each(sub {
        my $i = shift;
        print $i + 1, ") ", pQuery($_)->text, "\n";
    });

还有HTML::DOM

无论你做什么,都不要使用正则表达式。

答案 1 :(得分:4)

我过去曾使用HTML Table Extract。 我个人觉得使用它有点笨拙,但也许我不太了解对象模型。 我通常使用本手册的这一部分来检查数据:

 use HTML::TableExtract;
 $te = HTML::TableExtract->new();
 $te->parse($html_string);

     # Examine all matching tables
     foreach $ts ($te->tables) {
       print "Table (", join(',', $ts->coords), "):\n";
       foreach $row ($ts->rows) {
          print join(',', @$row), "\n";
       }
     }`

答案 2 :(得分:3)

虽然我通常使用LWP / LWP::Simple完成此操作,但Perl中任何类型的网页抓取的当前“首选”模块都是WWW::Mechanize

答案 3 :(得分:2)

如果您熟悉XPath,还可以使用HTML::TreeBuilder::XPath。如果你不是......那么你应该是; - )

答案 4 :(得分:2)

对于类似的Stackoverflow问题,请查看....

我喜欢使用pQuery来做这样的事情,但Web::Scraper确实看起来很有趣。

答案 5 :(得分:2)

你也可以使用这个简单的perl模块WEB :: Scraper,这很容易理解,让我的生活变得简单。请按照此示例获取更多信息。

http://teusje.wordpress.com/2010/05/02/web-scraping-with-perl/

答案 6 :(得分:1)

我的意思是拖延一个死线程,但任何搜索此线程的人都应该结帐WWW::Scripter - '用于编写有脚本的网站脚本'

快乐的远程数据聚合;)

答案 7 :(得分:1)

看看神奇的Web::Scraper,它是用于网页抓取的 THE 工具。

答案 8 :(得分:0)

我使用LWP::UserAgent来满足大部分屏幕抓取需求。如果您需要Cookie支持,也可以与HTTP::Cookies结合使用。

这是一个关于如何获取源的简单示例。

use LWP;
use HTTP::Cookies;
my $cookie_jar = HTTP::Cookies->new;
my $browser = LWP::UserAgent->new;
$browser->cookie_jar($cookie_jar);

$resp = $browser->get("https://www.stackoverflow.com");
if($resp->is_success) {
   # Play with your source here
   $source = $resp->content;
   $source =~ s/^.*<table>/<table>/i; # this is just an example 
   print $source;                     # not a solution to your problem.
}

答案 9 :(得分:0)

使用perl查看这个网页抓取的小例子: link text