解析消防调度网站提要使用其中包含的离散元素

时间:2013-07-23 00:48:00

标签: java php html xml parsing

我希望能够解析以下网站并将每个调度页面分成不同的元素,例如时间,数据,地址以及调度到调用的每个单独的单位等。

http://lebanonema.org/pager/html/monitor.html

我希望能够使用页面的离散元素并将其显示在不同的网站上。

例如我想转

这样:

20:15:09 22-07-13 POCSAG-1 West Cornwall Township SPANGLER RD HORSESHOE PIKE MV - 伤害事故**非紧急响应* TK5 Fire-Box 37-03 EMS -Box 190-7 Station 05 **

<tr>
<td class="COL2">20:15:09</td>
<td class="COL3">22-07-13</td>
<td class="COL4">POCSAG-1</td>
<td class="COL7">
West Cornwall Township SPANGLER RD HORSESHOE PIKE MV - Accident w/Injuries **NON EMERGENCY RESPONSE*** TK5 Fire-Box 37-03 EMS-Box 190-7
<span class="M">Station 05</span>
</td>
</tr>

我可以在其他网站上以某种方式使用的单个元素,例如:

time:20:15:09
date:22-07-13
pageid:POCSAG-1
address:West Cornwall Township SPANGLER RD HORSESHOE PIKE
incident:MV - Accident w/Injuries
additional_details:**NON EMERGENCY RESPONSE***
responding_unit_1:TK5
responding_unit_2:
responting_unit_3:
etc...
fire_box:37-03 
ems_box:190-7
station:7

我在HTML,CSS和Java方面有一定的经验。我愿意学习更多东西。如果有人可以提供我所要求的代码片段,我应该能够从中学到足够的东西,以便学会完成我的要求。

请记住,页面不断更新页面,并且无论使用何种方法来执行我要求的操作,都需要适应这样的环境。

1 个答案:

答案 0 :(得分:1)

你实际上在这里问了两个问题。一个是如何解析HTML(你发现How do you parse and process HTML/XML in PHP?中概述的内容,并且已经广泛回答了这个问题,我跳过了这一部分)。另一个是如何解析字符串。

解析字符串完全取决于字符串的格式。通常使用PHP's string functionsPHP's regular expression functions来完成此操作。有关这些内容的更多信息,请参阅PHP手册。

在我已经概述的函数旁边,您还需要字符串的格式规范。到目前为止,您的问题仅包含字符串的示例,但是,规范缺少哪个部分是什么以及决策标准是什么。

您需要先指定,我会在编写第一行代码之前执行此操作。最后,您可以使用您喜欢的任何编程语言编写它。因此,如果PHP或Java并不重要,那么正确指定它的工作方式就更为重要了。然后,您将该处理编码为代码。


一些粗略的示例代码(摘录),用于演示如何在PHP中完成:

$url = 'http://lebanonema.org/pager/html/monitor.html';

$buffer = file_get_contents($url);

$buffer = utf8_encode($buffer);

$config = [
    'doctype'    => 'omit',
    'output-xml' => 1,
];

$buffer = tidy_repair_string($buffer, $config, 'utf8');

$xml = simplexml_load_string($buffer);

$nodes = new DecoratingIterator(
    new SimpleXMLXPathIterator($xml, '//tr[count(td) > 1]'),
    'NodeParser'
);

foreach ($nodes as $index => $node) {
    echo $index, ': ', json_encode($node, JSON_PRETTY_PRINT), "\n";
}

示例性输出:

0: {
    "date": "23-07-13",
    "time": "07:56:28",
    "pageid": "POCSAG-1",
    "text": "Jackson Township W LINCOLN AVE N LOCUST ST MV -\nAccident w\/Injuries FG-3 E30 R31 Fire-Box 30-01 EMS-Box 140-2",
    "station": "Station 31"
}
1: {
    "date": "23-07-13",
    "time": "07:56:26",
    "pageid": "POCSAG-1",
    "text": "Jackson Township W LINCOLN AVE N LOCUST ST MV -\nAccident w\/Injuries FG-3 E30 R31 Fire-Box 30-01 EMS-Box 140-2",
    "station": "Station 30"
}
2: {
    "date": "23-07-13",
    "time": "07:56:25",
    "pageid": "POCSAG-1",
    "text": "Jackson Township W LINCOLN AVE N LOCUST ST MV -\nAccident w\/Injuries FG-3 E30 R31 Fire-Box 30-01 EMS-Box 140-2",
    "station": "Sta 31 Siren"
}

...

497: {
    "date": "22-07-13",
    "time": "12:21:27",
    "pageid": "POCSAG-1",
    "text": "South Lebanon Township 1700 S LINCOLN AVE VA\nMedical CenterAFA - Auto Fire Alarm FG-4 E25 E26 W36 R25 TK26 TK36\nAmbCo190 Fire-Box 25-08 EMS-Box 190-4",
    "station": "Station 26"
}
498: {
    "date": "22-07-13",
    "time": "12:21:20",
    "pageid": "POCSAG-1",
    "text": "South Lebanon Township 1700 S LINCOLN AVE VA\nMedical CenterAFA - Auto Fire Alarm FG-4 E25 E26 W36 R25 TK26 TK36\nAmbCo190 Fire-Box 25-08 EMS-Box 190-4",
    "station": "Station 25"
}
499: {
    "date": "22-07-13",
    "time": "12:18:19",
    "pageid": "POCSAG-1",
    "text": "Company 34 Correction..No Training TOMORROW\nnight..Training Will Be Held Thursday At 1830",
    "station": "Station 34"
}

此示例还表明,您需要处理的不仅仅是解析,例如清理无效的HTML(in PHP Tidy can be used)并处理字符集编码。

NodeParser对象只是重载了<TR>操作返回的具体xpath()元素 - 这是basic SimpleXML parsing,之前已经概述过了。作为奖励,此对象实现JsonSerializable interface,以便可以轻松转换/显示。

使用解析器对象可以随时更改和调整解析。例如。正如此示例代码所示,到目前为止,文本尚未进一步解析(因为缺少规范)。

我希望这有用,并展示至少可以完成的方式。