8

PHP を使用して Web サイトをスクレイピングし、データを収集しています。正規表現を使用せずにすべて実行されます。代わりに、特定の HTML タグを見つけるために php の expand() メソッドを使用しています。

Web サイトの構造 (CSS、HTML) が変更された場合、スクレイパーによって間違ったデータが収集される可能性があります。問題は、HTML 構造が変更されたかどうかをどのように知ることができるかということです。間違ったデータが保存されないように、データベースにデータを保存する前にこれを特定する方法。

4

6 に答える 6

7

コンテンツが変更されるページをスクレイピングしている場合、クリーンなソリューションはないと思います。

私はいくつかの python スクレイパーを開発しましたが、サイトのレイアウトが微妙に変更されただけでイライラすることを知っています。

機械化されたソリューションを試すことができます (対応する PHP はわかりません)。運が良ければ、抽出する必要があるコンテンツ (リンク?) を分離できます。

別の可能なアプローチは、いくつかの制約をコーディングし、データベースに保存する前にそれらをチェックすることです。

たとえば、URL をスクレイピングしている場合、スクレイパーが解析したものが正式に有効な URL であることを確認する必要があります。整数IDまたは有効と認識できるスクレイピングしたいものについても同じです。

プレーンテキストをスクレイピングしている場合は、チェックがより困難になります。

于 2010-03-27T18:01:45.680 に答える
4

サイトによって異なりますが、div、class、style タグなどのスクレイピングされたページ内のページ要素の数を数え、これらの合計を後のスクレイピングの合計と比較することで、ページ構造が変更されたかどうかを検出できます。

同様のプロセスを CSS ファイルに使用することもできます。各クラスまたは ID の名前を単純な正規表現を使用して抽出し、必要に応じて保存およびチェックすることができます。このリストに新しい追加がある場合、スクレイピング対象のサイトのどこかでページ構造がほぼ確実に変更されています。

于 2012-03-29T18:15:37.243 に答える
2

構造に関する変更を知りたい場合は、最初のページの DOM 構造を保存してから、新しいページと比較するのが最善の方法だと思います。

それを行う方法はたくさんあります:- SaxParser DOmParser など

私は、私が意味することへのいくつかの指針を与える小さなブログを持っています http://let-them-c.blogspot.com/2009/04/xml-as-objects-in-oops.html

または、 http://en.wikipedia.org/wiki/Simple_API_for_XMLまたは DOm Utility パーサーを使用できます。

于 2010-03-27T18:07:08.430 に答える
2

ここで私のお尻を言いますが、ドキュメント オブジェクト モデルの PHP メソッドを調べたいと思うかもしれません。

http://php.net/manual/en/book.dom.php

DOM に関する私の非常に限られた理解が正しければ、HTML サイト構造の変更はドキュメント オブジェクト モデルを変更しますが、固定構造内の単純なコンテンツの変更は変更されません。では、DOM の状態をキャプチャして、スクレイプごとに比較できれば、理論上、そのような変更が行われたと判断できないでしょうか?

(ちなみに、司法試験の結果が特定のページに掲載されたときにメール通知を取得しようとしていたときにこれを行った方法は、file_get_contents() の値を比較するだけでした。驚くべきことに、問題なく動作しました: 誤検知はなく、メールが届きましたサイトがコンテンツを投稿するとすぐに。)

于 2010-03-27T23:50:15.073 に答える
1

まず、元の html と新しい html のハッシュを比較したい場合があります。MD5 と SHA1 は 2 つの一般的なハッシュです。これはすべての状況で有効である場合とそうでない場合がありますが、よく知っておく必要があります。これにより、コンテンツ、タグ、または何かが変更されたかどうかがわかります。

構造が変更されたかどうかを理解するには、タグの出現回数のヒストグラムを取得して比較する必要があります。タグが順不同であることが気になる場合は、タグのツリーをキャプチャし、タグが同じ順序で発生しているかどうかを比較する必要があります。これは、あなたが達成したいことに非常に具体的です。

PHP Simple HTML DOM Parserは、HTML の解析に役立つツールです。

于 2010-03-27T17:59:58.023 に答える
0

Explode()は HTML パーサーではありませんが、HTML 構造の変更について知りたいと考えています。それは難しいでしょう。HTML パーサーを使用してみてください。これを適切に行うことができるものは他にありません。

于 2010-03-27T18:05:21.873 に答える