12

我想从 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 获取。

甚至在this上也类似this。 http://www.imdb.com/title/tt0848228/reviews

我应该怎么办?

4

3 回答 3

7

使用phantomjshttp ://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)

您必须使用 phantom 中的选项--web-security=no来允许跨域交互(即对于 facebook iframe)

要从 phantomjs 与其他应用程序通信,您可以使用 Web 服务器或发出 POST 请求:https ://github.com/ariya/phantomjs/blob/master/examples/post.js

于 2012-06-03T17:31:47.330 回答
6

您可以使用HTML Unit,一个基于 java 的“GUI LESS 浏览器”。您可以轻松获得任何页面的最终渲染输出,因为这会像 Web 浏览器那样加载页面并返回最终渲染输出。不过,您可以禁用此行为。

更新:例如,您是在问吗?你不必为此做任何额外的事情:

例子:

WebClient webClient = new WebClient();
HtmlPage myPage = ((HtmlPage) webClient.getPage(myUrl));

更新 2:您可以按如下方式获取 iframe:

HtmlPage myFrame = (HtmlPage) myPage.getFrameByName(myIframeName).getEnclosedPage();

请阅读上述链接中的文档。在 HTMLUnit 中获取页面内容没有什么不能做的

于 2012-06-04T06:38:13.013 回答
0

解决该问题的简单方法。 您好,您可以使用HtmlUnit是 java API,我认为它可以帮助您访问执行的 js 内容,作为一个简单的 html。

WebClient webClient = new WebClient();
HtmlPage myPage = (HtmlPage) webClient.getPage(new URL("YourURL"));
System.out.println(myPage.getVisibleText());
于 2020-03-24T20:44:50.980 回答