我想从HTML页面获取数据(刮掉它)。但它包含javascript中的评论。在普通的java url fetch中,我只获取了没有执行Javascript的HTML(实际的)。我想要执行Javascript的最终页面。
示例: - http://www.glamsham.com/movies/reviews/rowdy-rathore-movie-review-cheers-for-rowdy-akki-051207.asp
此页面的评论为facebook插件,以Javascript格式提取。
即便如此,也与此类似。 http://www.imdb.com/title/tt0848228/reviews
我该怎么办?
答案 0 :(得分:7)
使用 phantomjs :http://phantomjs.org
var page = require('webpage').create();
page.open("http://www.glamsham.com/movies/reviews/rowdy-rathore-movie-review-cheers-for-rowdy-akki-051207.asp")
setTimeout(function(){
// Where you want to save it
page.render("screenshoot.png")
// You can access its content using jQuery
var fbcomments = page.evaluate(function(){
return $(".fb-comments iframe").contents().find(".postContainer")
})
},10000)
你必须使用幻像--web-security=no
中的选项来允许跨域交互(即对于facebook iframe)
要与phantomjs中的其他应用程序通信,您可以使用Web服务器或发出POST请求:https://github.com/ariya/phantomjs/blob/master/examples/post.js
答案 1 :(得分:4)
您可以使用基于java的“GUI LESS浏览器”HTML Unit。您可以轻松获取任何页面的最终渲染输出,因为这会在Web浏览器这样做时加载页面并返回最终渲染的输出。您可以禁用此行为。
更新:你问的是什么?这样做你不需要做任何额外的事情:
示例:强>
WebClient webClient = new WebClient();
HtmlPage myPage = ((HtmlPage) webClient.getPage(myUrl));
更新2 :您可以按如下方式获取iframe:
HtmlPage myFrame = (HtmlPage) myPage.getFrameByName(myIframeName).getEnclosedPage();
请阅读上面链接的文档。在HTMLUnit中获取页面内容没有什么不可做的
答案 2 :(得分:0)
解决该问题的简单方法。 您好,您可以使用 HtmlUnit 是Java API,我认为它可以帮助您以简单的html格式访问已执行的js内容。
WebClient webClient = new WebClient();
HtmlPage myPage = (HtmlPage) webClient.getPage(new URL("YourURL"));
System.out.println(myPage.getVisibleText());