Увы, у меня есть еще один вопрос:
Мне было поручено прочитать веб-страницу и извлечь ссылки с этой страницы (легко с HTML :: TokeParser).Затем он (мой начальник) настаивает на том, чтобы я прочитал по этим ссылкам и взял некоторые детали с каждой из этих страниц, а затем проанализировал ВСЮ эту информацию в файле XML, который впоследствии можно будет прочитать.
Итак, я могуустановите это довольно просто, например, так:
#!/usr/bin/perl -w
use strict;
use LWP::Simple;
require HTML::TokeParser;
$|=1; # un buffer
my $base = 'http://www.something_interesting/';
my $path = 'http://www.something_interesting/Default.aspx';
my $rawHTML = get($path); # attempt to d/l the page to mem
my $p = HTML::TokeParser->new(\$rawHTML) || die "Can't open: $!";
open (my $out, "> output.xml") or die;
while (my $token = $p->get_tag("a")) {
my $url = $token->[1]{href} || "-";
if ($url =~ /event\.aspx\?eventid=(\d+)/) {
( my $event_id = $url ) =~ s/event\.aspx\?eventid=(\d+)/$1/;
my $text = $p->get_trimmed_text("/a");
print $out $event_id,"\n";
print $out $text,"\n";
my $details = $base.$url;
my $contents = get($details);
# now set up another HTML::TokeParser, and parse each of those files.
}
}
Это, вероятно, будет хорошо, если бы на этой странице было 5 ссылок.Тем не менее, я пытаюсь прочитать около 600 ссылок и получить информацию с каждой из этих страниц.Так что, само собой разумеется, мой метод занимает много времени ... я, честно говоря, не знаю, сколько времени, так как я никогда не давал этому закончиться.
Я хотел просто написать что-то, что толькополучает информацию по мере необходимости (например, Java-приложение, которое ищет информацию по нужной ссылке) ... однако, это кажется неприемлемым, поэтому я обращаюсь к вам, ребята:)
Есть ли способ улучшить этот процесс?