【发布时间】:2011-09-22 08:38:31
【问题描述】:
唉,我还有一个问题:
我的任务是阅读网页并从该网页中提取链接(使用 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 应用程序)......但是,这似乎是不可接受的,所以我转向你们:)
有什么方法可以改进这个过程吗?
【问题讨论】:
标签: perl html-parsing