任何人都有一个很好的解决方案来抓取带有 Javascript 生成的内容(在本例中为 HTML 表)的页面的 HTML 源代码? [关闭]

Posted

技术标签:

【中文标题】任何人都有一个很好的解决方案来抓取带有 Javascript 生成的内容(在本例中为 HTML 表)的页面的 HTML 源代码? [关闭]【英文标题】:Anyone have a good solution for scraping the HTML source of a page with content (in this case, HTML tables) generated with Javascript? [closed] 【发布时间】:2011-02-20 17:24:49 【问题描述】:

任何人都有一个很好的解决方案来抓取包含使用 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 的问题是一个冲突的应用程序,而不是服务器停机时间,这只是一个巧合。

【问题讨论】:

【参考方案1】:

好吧,Java 提供了一些方便的解决方案,例如 HtmlUint,它可以正确解释 Javascript,因此应该允许生成的 html 可见。

【讨论】:

【参考方案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')。

【讨论】:

以上是关于任何人都有一个很好的解决方案来抓取带有 Javascript 生成的内容(在本例中为 HTML 表)的页面的 HTML 源代码? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

frame上制作啥可以很好的抓取mask

如何轻松复制/复制现有领域对象

自动化 Amazon EBS 快照任何人在 Linux 上都有一个好的脚本或解决方案 [关闭]

带有不错的 java 查询客户端的 Timeseries DB

Google 为在线/离线 wiki 提供了一个很好的解决方案?

jQuery 可排序