我希望能够解析以下网站并将每个调度页面分成不同的元素,例如时间,数据,地址以及调度到调用的每个单独的单位等。
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方面有一定的经验。我愿意学习更多东西。如果有人可以提供我所要求的代码片段,我应该能够从中学到足够的东西,以便学会完成我的要求。
请记住,页面不断更新页面,并且无论使用何种方法来执行我要求的操作,都需要适应这样的环境。
答案 0 :(得分:1)
你实际上在这里问了两个问题。一个是如何解析HTML(你发现How do you parse and process HTML/XML in PHP?中概述的内容,并且已经广泛回答了这个问题,我跳过了这一部分)。另一个是如何解析字符串。
解析字符串完全取决于字符串的格式。通常使用PHP's string functions和PHP'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,以便可以轻松转换/显示。
使用解析器对象可以随时更改和调整解析。例如。正如此示例代码所示,到目前为止,文本尚未进一步解析(因为缺少规范)。
我希望这有用,并展示至少可以完成的方式。