任何人都有一个很好的解决方案来抓取带有 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 源代码? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
自动化 Amazon EBS 快照任何人在 Linux 上都有一个好的脚本或解决方案 [关闭]
带有不错的 java 查询客户端的 Timeseries DB