-2

次の Web サイトを解析し、各ディスパッチ ページを時間、データ、住所、通話にディスパッチされた個々のユニットなどの個別の要素に分割できるようにしたいと考えています。

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

ページの個々の要素を使用して、別の Web サイトなどに表示できるようにしたいと考えています。

たとえば、私は

これ:

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>

次のような別の Web サイトで何らかの方法で使用できる個々の要素に変換します。

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 についてある程度の経験があります。私はもっ​​と多くのことを学ぶことにオープンです。誰かが私が求めていることを実行するコードのスニペットを提供できる場合、私が求めていることを完了する方法を学ぶために、そこから十分に学ぶことができるはずです.

ページは常にページで更新されており、私が求めていることを行うために使用される方法が何であれ、そのような環境に対応する必要があることに注意してください.

4

1 に答える 1

1

ここで実際に 2 つの質問をしています。1 つは HTML を解析する方法です ( PHP で HTML/XML を解析および処理するにはどうすればよいですか?で概説されています。これについては広範囲に回答されているため、その部分はスキップします)。もう 1 つは、文字列を解析する方法です。

文字列の解析は、文字列の形式に完全に依存します。これは通常、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オブジェクトは、操作<TR>によって返された具体的な要素をオーバーロードしているだけです。これは、基本的な SimpleXML 解析であり、前述のとおりです。おまけとして、このオブジェクトはインターフェースを実装しているため、簡単に変換/表示できます。xpath()JsonSerializable

パーサー オブジェクトを使用すると、時間の経過とともに解析を変更および微調整できます。たとえば、このコード例が示すように、これまでのテキストはさらに解析されていません (仕様が欠落しているため)。

これが役に立ち、少なくともそれを行う方法を示してくれることを願っています。

于 2013-07-23T12:02:26.050 に答える