如何在node-js环境中使用phantomjs进行动态页面网页抓取?

时间:2016-07-24 12:38:28

标签: javascript node.js web-scraping request phantomjs

我正在进行网络抓取,以完成一些任务。

我已经使用node-js 请求模块进行页面抓取。

它适用于cookie会话以及所有内容。

但是,当渲染使用某些javascript框架构建动态网页时,它会失败,例如 ANGULAR BACKBONE 等。

我正在尝试让phantomjs克服这个问题,因为我在谷歌上发现这样做会有所帮助。

我还为phantomjs phantom

找到了一个nodejs桥

使用phantomjs和这个桥接模块,我能够完成同样的事情。

var phantom = require('phantom');
var fs = require('fs');

var sitepage = null;
var phInstance = null;
phantom.create()
    .then(instance => {
        phInstance = instance;
        console.log("Instance created");
        return instance.createPage();
    })
    .then(page => {
        sitepage = page;
        console.log("createing page");
        return page.open('https://paytm.com/shop/p/carrier-estrella-plus-1-5-ton-3-star-window-ac-LARCARRIER-ESTRPLAN5550519593A34?src=grid&tracker=%7C%7C%7C%7C%2Fg%2Felectronics%2Flarge-appliances%2F1-5-ton-3-star-ac-starting-at-rs-22699%7C88040%7C1');
    })
    .then(status => {
        //console.log(status);
        console.log("getting content of page");
        return sitepage.property('content');
    })
    .then(content => {
      console.log("success");
        //console.log(content);
        fs.writeFile("ok.text", content);
        sitepage.close();
        phInstance.exit();
    })
    .catch(error => {
      console.log("errr");
        //console.log(error);
        phInstance.exit();
    });

以上是我正在尝试加载动态网站页面的代码,它是用角度框架构建的。

任何人都可以指导我相同或正确的上述代码,我错过了正确的事情。

1 个答案:

答案 0 :(得分:0)

您在动态代码运行之前获取页面内容,您需要等待负载完成。

page.open后面的块需要等待页面完成,如果你知道从后端获取的元素你可以等待该元素(参见phantomjs doc中的waitfor示例) )。