【问题标题】:Scraping Data. Save File?抓取数据。保存存档?
【发布时间】:2011-08-08 22:20:55
【问题描述】:
我正在尝试从使用 javascript 加载大部分内容的网站上抓取数据。现在我正在使用jSoup 来解析 html 页面,但是由于大部分内容是使用 javascript 加载的,所以我无法解析我想要的数据。
我应该如何获取这个 javascript 内容?我应该先保存页面然后使用 jSoup 加载和解析它吗?如果是这样,我应该在保存之前使用什么来加载 javascript 内容?有没有你推荐的可以输出 html 的 API?
目前正在使用java。
【问题讨论】:
标签:
java
html
web-scraping
【解决方案1】:
您可能有兴趣查看pjscrape(免责声明:这是我的项目)。它是一个使用PhantomJS 的命令行工具,允许在完整的浏览器上下文中使用 JavaScript 和 jQuery 进行抓取 - 除其他外,您可以为页面定义一个“就绪”函数并等待抓取直到该函数(可能会检查某些 DOM 元素的存在等)返回 true。
根据页面的不同,另一个选项是使用像 Firebug 这样的控制台来确定正在加载的数据(即页面上的 AJAX 调用正在检索哪些 URL),并直接从那些网址。
【解决方案2】:
如果数据是用 javascript 生成的,那么数据就在下载的页面中。
更好的是直接动态解析它们,就像使用纯 HTML 或文本解析一样。
如果您无法使用 jSoup API 隔离标记,只需使用直接字符串选项将它们解析为纯文本。
【解决方案3】:
我尝试使用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;