問題の原因は比較的単純で、ナビゲーション ページのデータを整理してデータベースに書き込む必要があります。より直感的な方法は、HTML ファイルを分析することです。一般的な方法は、PHP 正規表現を使用して照合することです。ただし、この方法では開発と保守が難しく、コードの可読性も非常に悪いです。
ナビゲーションページのデータはDOMツリーに規則的に配置されており、JSを使用した複数のループで簡単に操作できます。また、JSはブラウザに依存する必要があり、データベースの操作は困難です。実際、PHP には、DOM ツリー内のノードを追加、削除、変更、確認するための既製のクラス ライブラリがあります。ここでいくつかメモします。
ここには、DOMDocument と DOMXPath という 2 つのクラスが関係しています。
実際、アイデアは比較的明確です。つまり、DOMDocument を通じて HTML ファイルを DOM ツリーのデータ構造に変換し、次に DOMXPath のインスタンスを使用して DOM ツリーを検索し、必要な特定のノードを取得します。その後、現在のノード Traverse のサブツリーを検索して、目的の結果を得ることができます。
現在のディレクトリにこのようなナビゲーション HTML ファイル「./hao.html」があります
ここで、すべての タグの中国語コンテンツを取得する必要があります。PHP コードは次のとおりです:
コピーコード コードは次のとおりです:
//HTML/xml ファイルを DOM ツリーに変換します
$dom = new DOMDocument();
$dom->loadHTMLFile("hao.html") );
//クラス修正を含むすべての dl タグを取得します
// 例 1: ID を持つすべてのものについて
//$elements = $xpath->query("//*[@id]");
// 例 2: 選択された ID のノード データの場合
//$elements = $xpath->query("/html/body/div[@id='yourTagIdHere']"); 例 3 : ワイルドカードを使用した上記と同じ
//$elements = $xpath->query("*/div[@id='yourTagIdHere']");
$xpath = new DOMXPath($dom); xpath->query(' //dl[@class="fix"]');
foreach ($dls として) {
$spans = $dl->childNodes
foreach ($spans として $) span) {
echorim($span->textContent)."t";
}
echo "n";
?>
注: DOMDocument のデフォルトのエンコーディングはラテン語であることに注意してください。したがって、UTF エンコードされた中国語を処理する場合は、 の直後に
コードをコピーする必要があります。コードは次のとおりです。 meta http-equiv="content-type" content= "text/html; charset=utf-8">
他の場所では、または単に
と書きます。認識されない。
http://www.bkjia.com/PHPjc/813508.htmlwww.bkjia.com
true
http://www.bkjia.com/PHPjc/813508.html
技術記事
問題の原因は比較的単純で、ナビゲーション ページのデータを整理してデータベースに書き込む必要があります。より直感的な方法は、HTML ファイルを分析することです。一般的な方法は、PHP を使用することです...
。