0

整整一周,我一直在尝试编写一个代码,该代码将从网页下载链接,然后遍历每个链接以转储每个链接页面上写入的内容。我下载的原始网页有 500 个链接,这些链接指向不同的网页,每个网页都包含对我来说很重要的信息。我只想降一级。但是我有几个问题。

回顾:我想从网页下载链接并自动让我的程序打印出这些链接中包含的文本。我希望将它们打印在文件中。

1)当我从原网站下载链接时,有用的没有写完整。(即他们说“/festevents.nsf/all?openform”这不是一个可用的网页)

2) 我一直无法打印页面的文字内容。我已经能够打印字体详细信息,但这没用。

     #Download all the modules I used#
     use LWP::UserAgent;
use HTML::TreeBuilder;
use HTML::FormatText;
use WWW::Mechanize;
use Data::Dumper;

#Download original webpage and acquire 500+ Links#

$url = "http://wx.toronto.ca/festevents.nsf/all?openform";

my $mechanize = WWW::Mechanize->new(autocheck => 1);

$mechanize->get($url);


my $title = $mechanize->title;

print "<b>$title</b><br />";


my @links = $mechanize->links;


foreach my $link (@links) {

   # Retrieve the link URL
   my $href = $link->url_abs;

  #
  # $URL1= get("$link");
  #
  my $ua = LWP::UserAgent->new;
  my $response = $ua->get($href);
  unless($response->is_success) {
    die $response->status_line;
  }
  my $URL1 = $response->decoded_content;
  die Dumper($URL1);

#This part of the code is just to "clean up" the text
$Format=HTML::FormatText->new;
$TreeBuilder=HTML::TreeBuilder->new;
$TreeBuilder->parse($URL1);
$Parsed=$Format->format($TreeBuilder);

open(FILE, ">TorontoParties.txt");
print FILE "$Parsed";
close (FILE);

 }

请帮我!生无可恋!如果可能,请向我解释每个步骤背后的逻辑?我已经为此苦恼了一个星期,我希望看到其他人在问题背后的逻辑。

4

1 回答 1

1

太多的工作。研究WWW::Mechanize API,了解几乎所有这些功能都已内置。未经测试:

use strictures;
use WWW::Mechanize qw();
use autodie qw(:all);

open my $h, '>:encoding(UTF-8)', 'TorontoParties.txt';
my $mechanize = WWW::Mechanize->new;
$mechanize->get('http://wx.toronto.ca/festevents.nsf/all?openform');
foreach my $link (
    $mechanize->find_all_links(url_regex => qr'/festevents[.]nsf/[0-9a-f]{32}/[0-9a-f]{32}[?]OpenDocument')
) {
    $mechanize->get($link->url_abs);
    print {$h} $mechanize->content(format => 'text');
}
close $h;
于 2012-07-10T16:47:10.603 回答