刮刮数据。保存存档?

时间:2011-08-08 22:20:56

标签: java html web-scraping

我正在尝试从使用javascript加载其大部分内容的网站中抓取数据。现在我使用jSoup来解析html页面,但是由于大部分内容是使用javascript加载的,我无法解析我想要的数据。

我应该如何获取此javascript内容?我应该先保存页面,然后使用jSoup加载并解析它吗?如果是这样,在保存之前我应该​​使用什么来加载javascript内容?是否有建议可以输出html的API?

目前正在使用java。

3 个答案:

答案 0 :(得分:1)

您可能有兴趣查看pjscrape(免责声明:这是我的项目)。它是一个命令行工具,使用PhantomJS允许在完整的浏览器上下文中使用JavaScript和jQuery进行抓取 - 除此之外,您可以为页面定义“就绪”函数并等待刮到函数(可能检查是否存在某些DOM元素,等等)返回true。

另一个选项,取决于页面,是使用像Firebug这样的控制台来确定正在加载的数据(即页面上的AJAX调用正在检索哪些URL),并直接从这些数据中删除数据网址。

答案 1 :(得分:0)

如果使用javascript生成数据,则数据位于下载页面中。 更好的是直接解析它们,就像使用纯HTML或文本解析一样。 如果你不能用jSoup API隔离令牌,只需使用直接字符串选项解析它们,就像纯文本一样。

答案 2 :(得分:0)

我尝试使用htmlUnit,但我觉得它很慢。

我最终在java中使用curl命令行函数,这对我的目的起作用。

String command = "curl "+url;
Process p = Runtime.getRuntime().exec(command);

BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((s = stdInput.readLine()) != null) {
   html = html+s+"\n";
}

return html;