我希望能够解析以下网站,并将每个调度页面分离为离散元素,如时间、数据、地址和被调度到呼叫的每个单独单元等。
http://lebanonema.org/pager/html/monitor.html
我希望能够使用一个页面的离散元素,并在不同的网站上显示它们等等。
例如,我想打开
这个:
20:15:09 22-07-13 POCSAG-1 West Cornwall Town SPANGLER RD HORSESHOE PIKE MV-有人受伤的事故**非紧急响应**TK5消防箱37-03 EMS箱190-7车站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方面有一定的经验。我愿意学习更多。如果有人能为我提供一段代码片段来完成我的要求,我应该能够从中学到足够的东西,以便学会完成我的请求。
请记住,页面会不断更新,无论用什么方法来完成我的要求,都需要适应这样的环境。
您实际上在这里问了两个问题。一个是如何解析HTML(您可以在中找到如何在PHP中解析和处理HTML/XML?中概述的内容,由于这个问题已经得到了广泛的回答,我跳过了这一部分)。另一个是如何解析字符串。
分析字符串完全取决于字符串的格式。这通常通过PHP的字符串函数和PHP的正则表达式函数来完成。有关这些的更多信息,请参阅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(在PHP中,Tidy可以用于此)和处理字符集编码。
NodeParser
对象只是重载xpath()
操作返回的具体<TR>
元素——这是基本的SimpleXML解析,前面已经介绍过了。作为奖励,该对象实现了JsonSerializable
接口,因此可以很容易地转换/显示。
使用解析器对象可以随着时间的推移更改和调整解析。例如,正如本示例代码所示,到目前为止,还没有对文本进行进一步解析(因为缺少规范)。
我希望这是有帮助的,并表明它可以至少。