perl - 提高 LWP::Simple perl 性能

标签 perl html-parsing

唉,我还有一个问题:

我的任务是阅读网页并从该页面中提取链接(使用 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 应用程序).​​.....但是,这似乎是 Not Acceptable ,所以我我转向你们:)

有没有办法改进这个过程?

最佳答案

如果您执行 get(),您可能会看到速度提升——但代码不那么简单。 s 并行而不是顺序。

Parallel::ForkManager是我要开始的地方(甚至在其文档中包含一个 LWP::Simple get() 示例),但在 CPAN 上还有很多其他的替代方案可以找到。 ,包括相当日期的 LWP::Parallel::UserAgent .

关于perl - 提高 LWP::Simple perl 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6473785/

相关文章:

perl - 在 Mojolicious 中渲染后如何执行代码?

perl - 在 perl 中实现 bash 命令 cd

perl - 使用 sed、perl、awk、tr 或任何东西只删除文本文件中的单个空格

java - 使用Java从动态网站中提取链接

java - 在 Jsoup 中使用 href 解析表类时出现问题

java - 使用 Java 从 HTML 中提取文本,包括源行号和代码

multithreading - Perl Fork 线程捕获输出

python - 如何使用 xpath 为这种 html 提取所有常规段落?

php - 如何在宽度 >= 300 的情况下对 IMG 进行正则表达式?

perl - find2perl perl shebang + eval 的确切含义是什么?