node 抓取数据-------一年以前学习的版本------------start--------------
lelet cheerio = require('cheerio') let urlLib = require("url"); const gbk=require("gbk"); get("https://chunmu-jia.jiyoujia.com/search.htm?spm=a1z10.3-c-s.w4002-17007221856.4.4fe9ad25hb7peu&_ksTS=1512987361656_194&callback=jsonp195&mid=w-17007221856-0&wid=17007221856&path=%2Fsearch.htm&search=y&csy=1&pv=20608:76856228").then((b) => { console.log("77777777") var $ = cheerio.load(gbk.toString('utf-8',b)); $(".photo").each(function(i, elem) { console.log($(this).find("img").attr("src")); }); }, (err) => { console.log("888888888") console.log(err); }); function get(url) { return new Promise((resolve, reject) => { _get(url) function _get(url1) { var mod = null; var res = urlLib.parse(url1); if (res.protocol == "http") { mod = require("http"); } else { mod = require("https"); } const req = mod.request({ host: res.host, path: res.path, port: res.port }, (res) => { console.log(res.statusCode ) if (res.statusCode >= 200 && res.statusCode < 300) {//表示获取的网页是成功的 var arr = []; res.on("data", (data) => { arr.push(data); }); res.on("end", () => { var b = Buffer.concat(arr); resolve(b); }); } else {//状态吗表示为成功 if (res.statusCode == 301 || res.statusCode == 302) {//表示网页诶重定向了 可以根据几次定向找到 _get(res.headers.location) } else { console.log(res.headers) reject(res.statusCode); } } }); req.on("error", (err) => { console.log("出错了" + err); }); req.end(); } }); }
不能实现的地方:动态添加的数据获取不到
-------------------------end-------------------------------------
---------------PhantomJS 抓取数据------------------start-----------------------------
PhantomJS是一个基于webkit的JavaScript API。它使用QtWebKit作为它核心浏览器的功能,使用webkit来编译解释执行JavaScript代码。任何你可以在基于webkit浏览器做的事情,它都能做到。它不仅是个隐形的浏览器,提供了诸如CSS选择器、支持Web标准、DOM操作、JSON、HTML5、Canvas、SVG等,同时也提供了处理文件I/O的操作,从而使你可以向操作系统读写文件等。PhantomJS的用处可谓非常广泛,诸如网络监测、网页截屏、无需浏览器的 Web 测试、页面访问自动化等。
PhantomJS官方地址:http://phantomjs.org/。
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 http://www/taobao.com
在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); } });
-------------------------end-------------------------------------
版权声明:除特别声明外,本站所有文章皆是本站原创,转载请以超链接形式注明出处!