我正在进行网络抓取,以完成一些任务。
我已经使用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();
});
以上是我正在尝试加载动态网站页面的代码,它是用角度框架构建的。
任何人都可以指导我相同或正确的上述代码,我错过了正确的事情。
答案 0 :(得分:0)
您在动态代码运行之前获取页面内容,您需要等待负载完成。
page.open后面的块需要等待页面完成,如果你知道从后端获取的元素你可以等待该元素(参见phantomjs doc中的waitfor示例) )。