【问题标题】:How can I screen scrape with Perl?如何使用 Perl 筛选抓取?
【发布时间】:2010-10-17 08:42:06
【问题描述】:

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

【问题讨论】:

    标签: perl screen-scraping


    【解决方案1】:

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

    我确实喜欢使用pQuery 来处理此类事情,但Web::Scraper 看起来确实很有趣。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            我并不是要拖出一个死线程,但任何通过谷歌搜索此线程的人也应该检查 WWW::Scripter - '用于编写有脚本的网站'

            快乐的远程数据聚合 ;)

            【讨论】:

              【解决方案6】:

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

              【讨论】:

                【解决方案7】:

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

                【讨论】:

                • 大卫:你能详细说明一下吗?我一直认为 WWW::Mechanize 更适合自动化测试。是什么让它超越了它?
                • WWW::Mechanize 适用于与网站的任何类型的交互。它从不只针对自动化测试。
                • 然而,Test::WWW::Mechanize 只针对自动化测试。它是 WWW::Mechanize 的包装器。
                【解决方案8】:

                我使用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】:

                  我过去使用过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";
                         }
                       }`
                  

                  【讨论】:

                  • HTML::TableExtract 非常神奇。一项很棒的功能是能够通过指定标题单元格的内容来选择表格,并且能够只保留您感兴趣的列。
                  【解决方案10】:

                  如果您熟悉 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

                  不过,无论您做什么,都不要为此使用正则表达式。

                  【讨论】:

                    猜你喜欢
                    • 2011-09-25
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-09-04
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多