2012-01-29 111 views
0

解析特定HTML表給定的URL與表數據的HTML像下面...良好做法在Perl

<tr class=nbg1><td><A HREF=api.dll?pgm=cdq32&p1=oavmsd&p2=fg3m9s5d&p3=&cmd=w1d27d0id9654&hl=antibio&lstid=026>Nadifloxacin</A></td><td>Aknetherapeutikum Antibiotikum (Gyrasehemmer)</td><td>WST</td><td></td></tr> 
<tr class=nbg2><td><A HREF=api.dll?pgm=cdq32&p1=oavmsd&p2=fg3m9s5d&p3=&cmd=w1d27d0id9728&hl=antibio&lstid=026>Ertapenem</A></td><td>Antibiotikum</td><td>WST</td><td></td></tr> 
<tr class=nbg1><td><A HREF=api.dll?pgm=cdq32&p1=oavmsd&p2=fg3m9s5d&p3=&cmd=w1d27d0id9761&hl=antibio&lstid=026>Panipenem</A></td><td>Beta-Lactam-Antibiotikum</td><td>WST</td><td></td></tr> 
<tr class=nbg2><td><A HREF=api.dll?pgm=cdq32&p1=oavmsd&p2=fg3m9s5d&p3=&cmd=w1d27d0id10302&hl=antibio&lstid=026>Prulifloxacin</A></td><td>Antibiotikum (Gyrasehemmer)</td><td>WST</td><td></td></tr> 
</table></td> 
<td width=15></td><td valign=top nowrap class=NBG1> 
<TABLE width="200" border="0" cellspacing="0" cellpadding="2"> 
<TR><TD CLASS="NBG2"> 
</TD></TR></TABLE><BR> 

我需要解析URL和URL的描述,其中提取的URL將被使用以進一步解析子頁面。完成這件事將是一個很好的做法,特別是獲取網址。

當前代碼:

my $te = HTML::TableExtract->new(depth => 3, count => 0); 
$te->parse($mainpage); 
my $ts = ""; 
my $row = ""; 
foreach $ts ($te->tables) { 
    foreach $row ($ts->rows) { 
     print @$row[0] . "\n"; 
    } 
} 

回答

-1

HTML::TableExtract可以幫助你準確地與處理表。

如果要提取只能從該表中每一個」元素的href屬性
+0

我需要把「api.dll?pgm = cdq32&p1 = oavmsd&p2 = fg3m ...」放入一個變量 – 2012-01-30 00:53:06

0

,沒有必要使用TableExtract,只需使用HTML::Query

my $qry = HTML::Query->new(text => $mainpage); 


my @hrefs = map { $_->attr('href') } grep { m/api\.dll/i } $qry->query('tr > td > a')->get_elements(); 

沒有測試過,但你的想法...

+0

,但是HTML :: Query在Debian 5默認的repo中不可用,而且它會成爲另一個模塊(高架)。所有解決方案都沒有一個模塊嗎?只需要url和url描述。 – 2012-01-30 11:04:34

+0

你爲什麼需要defauly回購?我相信它在ubuntu repo上也不可用,只需使用CPAN來安裝模塊或cpanm。 – snoofkin 2012-02-01 07:35:52

+0

P.S:關於模塊開銷,Perl都是關於CPAN的,這是它的關鍵(除了其他的東西,但那是主要的)。如果你不想使用模塊,使用全局匹配(m // g)regex來匹配所有的url和它們的描述,因爲我看起來像所有這些url都有相同的格式。 – snoofkin 2012-02-01 07:38:43