5

Javascript で生成されたコンテンツ (この場合は HTML テーブル) を含むページの HTML ソースをスクレイピングするための優れたソリューションはありますか?

Crowbarを使用した実行可能なソリューションですが、非常に単純です。

<?php
function get_html($url) // $url must be urlencode(d)
{
$context = stream_context_create(array(
    'http' => array('timeout' => 120) // HTTP timeout in seconds
    ));
    $html = substr(file_get_contents('http://127.0.0.1:10000/?url=' . $url . '&delay=3000&view=browser', 0, $context), 730, -32); // substr removes HTML from the Crowbar web service, returning only the $url HTML
return $html;
}
?>

Crowbar を使用する利点は、ヘッドレス Mozilla ベースのブラウザーのおかげで、テーブルがレンダリングされる (およびアクセス可能になる) ことです。編集:Crowbarの問題は、サーバーのダウンタイムではなく、競合するアプリであることがわかりました。これは単なる偶然でした.

4

2 に答える 2

2

そうですね、Javaは、Javascriptを正しく解釈するHtmlUintのようないくつかの便利なソリューションを提供し、その結果、生成されたhtmlを表示できるようにする必要があります。

于 2010-05-18T09:02:48.177 に答える
2

これは、cURL/Crowbar を使用した OP の例のより堅牢なバージョンです。

<?php
function get_html($url)
{
$curl = curl_init();
curl_setopt ($curl, CURLOPT_URL, 'http://127.0.0.1:10000/?url=' . $url . '&delay=3000&view=as-is');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec ($curl);
return $html;
}
?>

「ストリームを開くことができませんでした: HTTP 要求が失敗しました!」というエラーが頻繁に発生していました。複数の URL で f_g_c を使用するとエラーが発生します。

また、$url を URL コード化することを忘れないでください (例: 'http%3A%2F%2Fwww.google.com' > ' http://www.google.com ')。

于 2010-05-20T17:56:39.860 に答える