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 提供了一些方便的解决方案,例如HtmlUint,它可以正确解释 Javascript,因此应该允许生成的 html 可见。

于 2010-05-18T09:02:48.177 回答
2

这是 OP 中使用 cURL/Crowbar 的示例的更强大的版本:

<?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 进行 urlencode(例如 'http%3A%2F%2Fwww.google.com' > ' http://www.google.com ')。

于 2010-05-20T17:56:39.860 回答