javascript - 如何抓取滚动加载项目的完全呈现的网页?

标签 javascript web-crawler phantomjs

<分区>

我想抓取 Google PlayStore 排名页面,例如“https://play.google.com/store/apps/category/EDUCATION/collection/topselling_paid

当我使用浏览器查看页面时,它首先显示 60 个应用程序,然后通过鼠标滚动并单击“显示更多”按钮显示最多 540 个应用程序。

我认为当创建“鼠标滚动”、“单击按钮”等事件时,页面已完全呈现。

问题是我不知道如何在没有浏览器的情况下生成这些事件,因此我只能抓取未完全呈现且仅包含 60 个应用程序的页面。

我用 PhantomJS 尝试了下面的代码,但根本没有用。

var page = require('webpage').create(),
    system = require('system'),
    url;
url = system.args[1];
page.onConsoleMessage = function(msg) {
    console.log(msg);
};
page.open(url, function() {            
    page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
        page.evaluate(function() {
            //Shows ranking up to 60th.
            console.log($("a.title").text());

            //Tried scroll mouse. However, cannot render the page.
            for(i=0; i<150; i++){
                console.log(document.body.scrollTop)
                window.scrollTo(0, document.body.scrollHeight);
                console.log(document.body.scrollTop)
                window.scrollTo(0, 0);
            }
            //Expect to show ranking up to 540th.
            console.log($("a.title").text());
        });
        phantom.exit()
    });
});

如何抓取完全呈现的页面?

最佳答案

您可以使用 CasperJs .抓取动态网页的好工具。

CasperJs is a navigation scripting & testing utility for PhantomJS

例如,您有点击事件:API Documentation

关于javascript - 如何抓取滚动加载项目的完全呈现的网页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29620657/

相关文章:

javascript - 在脚本中使用 setselectedindex 函数在同一网页上的多个下拉菜单中选择相同的值

javascript - 当我尝试使用 extjs 网格编辑器插入新记录时,无法读取 null 错误的属性 'mergeAttributes'

javascript - 基本 JavaScript 项目任务模态结构

javascript - 仅使用 Javascript 获取 CSS 未计算的属性值

xml - 解析器从 RDF/XML 网页中为我的 Java 网络爬虫提取 URI

javascript - 假导航器属性

java - Java多线程网络爬虫中控制线程数量和对象访问

hadoop - 在 Hortownworks 或 YARN 上集成 Nutch

javascript - 如何在 CasperJS 中设置 wait() 的值?

javascript - JQuery 未包含在 PhantomJs 中