2

phpを使用して外部Webサイトからhtmlコンテンツをプルして解析する方法を知っていますが、問題は、抽出したいコンテンツがjavascript関数によって生成されることです。

コードは次のようになります。

  <div align="left">
   <div id="divCotizaciones"></div>
   <script type="text/javascript">
           getCotizaciones("cotizaciones_busca.dat");
   </script>
  </div>

その関数によって生成されたすべてのコンテンツを抽出したいと思います。これは、私がコンテンツをプルしようとしているWebページです:http ://www.bvl.com.pe/neg_rv_alfa.html#

私はこれを試しましたが、機能していません:

$html = new DOMDocument();
$html->loadHtmlFile('http://www.bvl.com.pe/neg_rv_alfa.html#');
$xpath = new DOMXPath($html);
$nodelist = $xpath->query('//*[@id="div"]/div[4]');
echo $output = $nodelist->item(0)->nodeValue;

// and this is the output I get: getCotizaciones("cotizaciones_busca.dat");
4

2 に答える 2

1

残念ながら、DOMや、get_file、curlなどの外部ソースをロードするその他のPHP関数を使用してJavaScriptコードを実行することはできません。JavaScriptコンパイラが必要であるか、プログラミング言語でJavScriptをコンパイルするためのプラグインが必要です(C ++上のWebKitなど)。PHPはそのサポートを提供していません。

ただし、ブラウザでデータがどのように生成され、そのデータがどのように表示されるかを確認することができます。私はあなたのためにそれをしました、そしてグリッドが別のURLにリクエストをすることによって生成されることを知りました。したがって、'http://www.bvl.com.pe/neg_rv_alfa.html#'JavaScript関数getCotizaciones("cotizaciones_busca.dat"); を呼び出す代わりに、ajaxを使用してこのURLを呼び出します。

http://www.bvl.com.pe/includes/cotizaciones_busca.dat

このURLは必要なデータであり、DOMなどを介してロードします>

ヒント:お好みのブラウザには、firebugまたはその他の開発ツールコンソールを使用してください。ajaxリクエストを見るときはいつでも、それが何をするのか、どこでリクエストをするのか、そしてパラメーターは何かを見てください。関数が保存されているjsファイルのソースを確認してください。それが何をするかを見てください。あなたのインスタンスhttp://www.bvl.com.pe/js/cabecera_pie.jsでは、どのユーザーがクリックしたかに応じて、ajaxリクエストを呼び出すことがわかります。domloadなどの前にphpbでそれを複製します

于 2012-12-01T04:03:26.590 に答える
0

PHPだけでは無理だと思います。

ただし、ブラウザーを別のプロセスで実行し、ページをロードして JavaScript を実行すると、結果を取得できます。

これは、PhantomJS ( http://phantomjs.org/ ) を使用して行うのは非常に簡単です。

ページをロードし、必要に応じてユーザー入力をシミュレートし、DOM の情報を確認し、PhantomJS ファイル API を使用して結果をどこかに保存し、結果を PHP にロードする JavaScript ファイルを準備する必要があります。例から始めることができます - https://github.com/ariya/phantomjs/blob/master/examples/pizza.jsを見てください。

于 2012-12-01T04:24:58.653 に答える