0

我使用这个 Perl 子例程从网页中获取一行,然后将其拆分以获取继续操作所需的信息。这已经工作了十几年。

sub capture_line {

   my $page_to_get = $_[0];
   my $host_to_get_text = $_[1];
   my $port = 80;
   my $buf = &HTTPGet($page_to_get, $host_to_get_text, $port);
   my $image_capture_text;
   my @lines = split(/\n/,$buf);
#      print "$lines[1]\n";
#      print "$page_to_get, $host_to_get_text\n";
#      print "$buf\n";

    foreach (@lines) {
       if (/$text_to_find/i) {
          $image_capture_text = $_;
     print "in_loop";
       last;
       }

     }
    return $image_capture_text;
}

不幸的$page_to_get是,现在始终是 301 重定向,并且$buf在打印时给了我一个 301 重定向页面,它显然不包含追捧的文本。是否有一个$in值对(例如)可以HTTPGet用来跳过重定向,以便在我在http://$host_to_get_text$page_to_get浏览器中键入时获得我看到的页面?或者有没有更好的方法来完成同样的事情(了解所查看网页源中不断变化的文件名)?

感谢您的时间。格雷格·马什

4

1 回答 1

7

函数从何HTTPGet而来?

如果您要使用 LWP ( http://search.cpan.org/dist/libwww-perl/ ) 进行 HTTP 获取,它将自动跟随重定向(您可以指定希望它跟随重定向之前的次数放弃)。

例如:

   use LWP::Simple qw()
   my ($page_to_get, $host_to_get_text) = @_;
   my $url = "http://$host_to_get_text$page_to_get";
   my $buf = LWP::Simple::get($url);
   my $image_capture_text;
   my @lines = split(/\n/,$buf);
   # ...
于 2010-01-02T02:09:27.467 回答