HTML :: TreeBuilder :: XPath:标识xpath表达式

时间:2010-10-16 23:34:52

标签: perl parsing

你好晚上亲爱的 - 在Stackoverflow上写下来!

终于又回来了!

我目前正在处理解析器脚本:我必须解析此站点的所有详细信息页面:[link text] [1]注意:一个非常强大的suiss站点 - 一个功能强大的政府服务器! 有几种方法可以做到这一点。我必须通过仅使用页面外的文本数据来摆脱大量废话...查看页面 - 非常简单 - 采取此示例页面 - 例如。

Altes Schulhaus Ossingen
Guntibachstrasse 10
8475  Ossingen
sekretariat.psossingen@bluewin.ch
Tel:052 317 15 45
Fax:052 317 04 42

我们看到 - 我需要一个小的PERL脚本来从HTML页面中获取这个[B]六行[/ B]文本。好吧 - 我们怎么做:我个人喜欢HTML :: TreeBuilder :: XPath,我们必须从CPAN安装。 以下是我们如何从其中一个文件中提取名称:

[B]注:[/ B]我不确定我必须采取的论点!见下面我的试验:

use strict;
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;

注意 - 您看到我对参数有一些问题。 我们可以看到,我们只需使用xpath-expression来识别我们想要的节点。 [B]那么如何确定?[/ B]嗯 - 我试图使用一个名为XPather的Firefox插件,它允许我们只需点击一个html元素并提取相应的xpath。因此,我们在Firefox中加载要解析的文件,单击我们想要的东西,获取xpath并在perl-script中使用它。 嗯,我不太确定,我用XPather完成了这项工作。我厌倦了找到以下页面的参数:查看页面 - 非常简单:查看结果页面的详细信息 - 源自此站点 - 非常强大的suiss站点 - 具有大量功能的政府服务器[请参阅链接上方]

见下面[B]我的试验[/ B]:我在XPather中发现的论点......他们真的是参数 - 这有助于我解析上面提到的详细结果页面:[见上面的链接]

 /html/body/div[3]/text()
 /html/body/div[4]/text()
 /html/body/div[6]/text()
 /html/body/div[7]/text()
 /html/body/div[9]/a/text()
 /html/body/div[10]/text()
 /html/body/div[11]/text()[1]
 /html/body/div[11]/text()[2]
 /html/body/div[12]/text()[1]
 /html/body/div[12]/text()[2]
 /html/body/div[13]/text()

[见链接上方]

查看html代码

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta name="generator" content="DigiOnline GmbH - WebWeaver 3.4 CMS - http://www.webweaver.de"><title>educa.ch</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><link rel="stylesheet" href="101.htm"><script src="102.htm"></script><script language="JavaScript"><!--
var did='d79376';
var root=new Array('d200','d205','d73137','d1566','d79376','d');
var usefocus = 1;
function check() {
if ((self.focus) && (usefocus)) {
self.focus();
}
}
// --></script></head><body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" onload="check();"><table cellspacing="0" cellpadding="0" border="0" width="100%"><tr><td width="15" class="popuphead"><img src="/0.gif" alt="" width="15" height="16"></td><td width="99%" class="popuphead">Adresse - Schulen in der Schweiz</td><td width="20" class="popuphead" valign="middle"><a href="#" title="Print" onclick="window.print(); return false;"><img src="../pics/print16x13.gif" alt="Drucken" width="16" height="13"></a></td><td width="20" class="popuphead" valign="middle"><a href="#" title="close" onclick="window.close(); return false;"><img src="../pics/close21x13.gif" alt="Schliessen" width="21" height="13"></a></td></tr>
<tr bgcolor="#B2B2B2"><td colspan="4"><img src="/0.gif" alt="" width="1" height="1"></td></tr></table><div class="leerzeile"> </div><div class="leerzeile"><img src="/0.gif" alt="" width="15"height="8">Altes Schulhaus Ossingen    </div><div class="leerzeile"> </div><div><img src="/0.gif" alt="" width="15" height="8">Guntibachstrasse 10</div><div><img src="/0.gif" alt="" width="15" height="8"></div><div><img src="/0.gif" alt="" width="15" height="8">8475  Ossingen</div><div class="leerzeile"> </div><div><img src="/0.gif" alt="" width="15" height="8"><a href="" target="_blank"></a></div><div><img src="/0.gif" alt="" width="15" height="8"><a href="mailto: sekretariat.psossingen@bluewin.ch">sekretariat.psossingen@bluewin.ch</a></div><div class="leerzeile"> </div><div><img src="/0.gif" alt="" width="15" height="8">Tel:<img src="/0.gif" alt="" width="6" height="8">052 317 15 45 </div><div><img src="/0.gif" alt="" width="15" height="8">Fax:<img src="/0.gif" alt="" width="4" height="8">052 317 04 42 </div><div> </div></body></html>

所以我希望有人想查看我的小Perl脚本并帮助我找到perl脚本的正确参数!

很高兴收到你的来信

[B] BTW [/ B] - 其他任务也很重要。

  1. 我应该如何获取页面:使用LWP或Mechanize或类似的东西!?
  2. 如何将数据存储在MySQL数据库中......!?
  3. 问候:很酷:

0 个答案:

没有答案