nodejs抓取动态网页(基于PhantomJS的PhantomJSAPI的核心浏览器的功能,使用webkit来编译)
优采云 发布时间: 2021-11-07 10:10nodejs抓取动态网页(基于PhantomJS的PhantomJSAPI的核心浏览器的功能,使用webkit来编译)
PhantomJS 是一个基于 webkit 的 JavaScript API。它使用 QtWebKit 作为其核心浏览器功能,并使用 webkit 来编译、解释和执行 JavaScript 代码。你可以在基于 webkit 的浏览器中做的任何事情,它都能做到。它不仅是一个隐形浏览器,还提供CSS选择器、Web标准支持、DOM操作、JSON、HTML5、Canvas、SVG等,还提供处理文件I/O的操作,让你可以对操作系统进行文件读写等。PhantomJS有广泛的用途,如网络监控、网页截图、无浏览器的网页测试、页面访问自动化等。
PhantomJS 官方地址:.
PhantomJS 安装:
1.到PhantomJS下载对应版本
2.设置环境变量PATH (sudo ln -s /Applications/phantomjs-2.1.1/bin/phantomjs /usr/local/bin/) windows通过自己的方法,2.1.1是你自己的版本
PhantomJS验证成功:在终端数据phantomjs
运行:phantomjs get_data.js
根据页面结构在page.evaluate中找到对应的数据并扔掉
//访问 phantomjs XXX.js 需要抓取的页面url
//创建一个webpage对象
var page = require('webpage').create();
//拿到页面url
var system = require('system');
//设置打开页面的大小 尽量大,有些图片都是懒加载
page.viewportSize = {
width: 2000,
height: 40000
};
//用phantomjs浏览器加载一个网页
page.open(system.args[1], function (status) {
// 输出状态
if (status !== 'success') {
console.log("加载失败")
//页面加载成功
} else {
//给一定的异步时间防止那些后加载的东西
setTimeout(function () {
//加载jquery
page.includeJs("https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js", function () {
//page.evaluate 方法内也可以执行页面js 在里面组装数据
var data = page.evaluate(function (s) {
var arr = [];
for (var i = 0; i < $(".J_MouserOnverReq").length; i++) {
var obj = {};
obj.href = $(".J_MouserOnverReq:eq(" + i + ")").find(".pic-link").attr("data-href");
obj.price = $.trim($(".J_MouserOnverReq:eq(" + i + ")").find(".g_price").text());
obj.title = $.trim($(".J_MouserOnverReq:eq(" + i + ")").find(".J_ClickStat").text());
obj.image = $(".J_MouserOnverReq:eq(" + i + ")").find(".J_ItemPic").attr("src");
arr.push(obj);
}
return arr;
});
console.log(JSON.stringify(data))
//把从页面拿到的数据传给自己的接口去处理数据
page.open('http://localhost:8080/data/data/sku_stock', 'POST', "data=" + data, function (status) {
console.log('去ares-chart处理数据了');
});
});
}, 5000);
}
});
-------------------------结束--------------------- ----------------