2

これは私の最初の投稿であり、間違っていたら申し訳ありませんが、ここに行きます:

私は、Web サイトから値をスクレイピングするプロジェクトに取り組んできました。値は、javascript 配列内の変数です。私はPHP Simple HTML DOMを使用しています。通常のスクリプトでは動作しますが、CDATA ブロックに保存されているスクリプトでは動作しません。したがって、CDATA ブロック内のデータをスクレイピングする方法を探しています。残念ながら、私が見つけたヘルプはすべて XML ファイルに関するものであり、HTML ファイルからスクレイピングしています。

私がこすり取ろうとしているJavaScriptは次のとおりです。

<script type="text/javascript">
//<![CDATA[
var data = [{"value":8.41,"color":"1C5A0D","text":"17/11"},{"value":9.86,"color":"1C5A0D","text":"18/11"},{"value":7.72,"color":"1C5A0D","text":"19/11"},{"value":9.42,"color":"1C5A0D","text":"20/11"}];
//]]>
</script>

スクレイピングする必要があるのは、var データの「値」変数です。

問題は、オブジェクトの CDATA 文字列を置き換えようとしたことです。次のコードは完全に機能します:-)

include('simple_html_dom.php');

$lines = file_get_contents('http://www.virtualmanager.com/players/7793477-danijel-pavliuk/training');

$lines = str_replace("//<![CDATA[","",$lines);
$lines = str_replace("//]]>","",$lines);

$html = str_get_html($lines);

foreach($html->find('script') as $element) {
    echo $element->innertext;
}

必要に応じて、より多くの情報を提供します。

4

1 に答える 1

2

CDATA適切なHTMLパーサーでは、Javascriptをブロックでラップする必要はありません。彼らがそれを捨てている場合は、解析する前にHTMLからそれらを削除して、次のようにします。

  1. ホストがその関数でHTTPサポートを無効にしている場合は、file_get_contents()またはcURLを使用して、HTMLファイルを文字列にダウンロードします。
  2. //<![CDATA[を使用して//]]>ビットを取り除くstr_replace()
  3. Simple DOMを使用して、クリーンアップされた文字列からHTMLを解析しますstr_get_html()
  4. 前と同じようにDOMオブジェクトを処理します。
于 2013-03-16T18:02:18.560 に答える