在每个5,000个HTML文件中,我只需要获得一行文本,即第999行。如何告诉HTML :: Parser我只需要获得第999行?
</p><h1>dataset 1:</h1>
<table border="0" bgcolor="#EFEFEF" leftmargin="15" topmargin="5"><tr>
<td><strong>name:</strong> </td> <td width=500> myname one </td></tr><tr>
<td><strong>type:</strong> </td> <td width=500> type_one (04313488) </td></tr><tr>
<td><strong>aresss:</strong> </td><td>Friedrichstr. 70, 73430 Madrid</td></tr><tr>
<td><strong>adresse_two:</strong> </td> <td> no_value </td></tr><tr>
<td><strong>telefone:</strong> </td> <td> 0000736111/680040 </td></tr><tr>
<td><strong>Fax:</strong> </td> <td> 0000736111/680040 </td></tr><tr>
<td><strong>E-Mail:</strong> </td> <td> Keine Angabe </td></tr><tr>
<td><strong>Internet:</strong> </td><td><a href="http://www.mysite.es" target="_blank">www.mysite.es</a><br></td></tr><tr> <td><strong>the office:</strong> </td>
<td><a href="http://www.mysite_two" target="_blank">mysite_two </a><br></td></tr><tr>
<td><strong>:</strong> </td><td> no_value </td></tr><tr>
<td><strong>officer:</strong> </td> <td> no_value </td> </td></tr><tr>
<td><strong>employees:</strong> </td> <td> 259 </td></tr><tr>
<td><strong>offices:</strong> </td> <td> 8 </td></tr><tr>
<td><strong>worker:</strong> </td> <td> no_value </td></tr><tr>
<td><strong>country:</strong> </td> <td> contryname </td></tr><tr>
<td><strong>the_council:</strong> </td> <td>
嗯,问题是,是否可以使用此属性在5000个文件中进行搜索:第999行是有意义的。换句话说,我可以告诉HTML解析器它必须查找(并提取)完全符合999行吗?
您好亲爱的RedGritty Brick - 我对HTML :: TokeParser
的经验不足use HTML::TreeBuilder::XPath;
my $tree = HTML::TreeBuilder::XPath->new;
#use real file name here
open(my $fh, "<", "file.html") or die $!;
$tree->parse_file($fh);
my ($name) = $tree->findnodes(qq{/html/body/table/tr[1]/td[2]});
print $name->as_text;
顺便说一句; RedGrittyBrick:查看其中一个示例网站:http://www.kultusportal-bw.de/servlet/PB/menu/1188427/index.html?COMPLETEHREF=http://www.kultus-bw.de/did_abfrage/detail.php?id=04313488 在灰色阴影块中,您可以看到想要的信息:需要17行。注意 - 我有5000个不同的HTML文件 - 所有这些都是以相同的方式构建的!
这意味着我很乐意拥有一个可以使用HTML :: TokeParser :: Simple和DBI运行的模板。
喜欢得到提示
答案 0 :(得分:1)
您的意思是第999行还是第999行?
前者可能是
perl -ne 'print if $. == 999' /path/to/*.dat
后者将涉及HTML解析器和一些选择逻辑。 Sax解析器可能更适合快速处理大量文件。它可能取决于使用哪个版本的HTML以及它是否“格式良好”。
Perl有许多XML和HTML解析器 - 您是否考虑过任何特定模块?
编辑:
您的问题似乎是您的XPath表达式。实际的HTML比复杂得多 你的XPath建议。以下表达式效果更好
#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;
use HTML::TreeBuilder::XPath;
#
# replace this with a loop over 5000 existing files
#
my $url = 'http://www.kultusportal-bw.de/'.
'servlet/PB/menu/1188427/index.html'.
'?COMPLETEHREF='.
'http://www.kultus-bw.de/'.
'did_abfrage/detail.php?id=04313488';
my $html = get $url;
my $tree = HTML::TreeBuilder::XPath->new();
#
# within the loop process the html like this
#
$tree->parse($html);
$tree->eof;
print $tree->findvalue('//table[@bgcolor]/tr[1]');
尝试剪切上面的内容并将其粘贴到文件中,然后使用Perl运行它。