唉,我還有另一個問題:提高LWP ::簡單的Perl性能
我一直負責閱讀一個網頁,提取(用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應用程序)...但是,這似乎並不可接受,所以我轉向你們:)
有沒有什麼辦法可以改善這個過程?
這正是我所期待的,謝謝。其他答案也很有用。感謝大家的幫助:) – Aelfhere
@Aelfhere,我打算髮佈一個解決方案到您的ForkManager問題,然後再刪除它。 – ikegami