菜鸟一只,抽空了解了下node,然后总结下学到的重点;
首先是安装nodejs,需要安装的版本最好是v6.0以上,不然有些特性不兼容
回调函数在完成任务后被调用,node使用了大量的回调函数,且所有的API都支持回调函数
新手一定要慎重,不要掉入回调地狱
Node.js 使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。
管道流:
画了一张无比形象的图,读取一个文件内容并将内容写入到另外一个文件中
模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展。通过exports和requirel两个对象来获取外部的模块及模块的接口,主要掌握模块的创建和加载模块已有模块
GET/POST请求
这一块其实我是不想看的,python和php中的两种请求看起来都差不多,无非是方式的不同,node也一样吧;如果仅仅是想了解而不是使用这门语言的话,看看基础的就好了(其实就是懒)
接下来用node写了个小爬虫,感觉还没python好用,再一次体会到了不同的活要用不同的工具,没有好语言,只有最适合的语言;
不要问我为什么又爬安居客(其实还是懒,之前用python爬过,,这次写是为了学习node而不是爬虫,so , 不要在乎爬什么)
/** * Created by john on 2018/10/17. * 尝试自己写个基于nodejs的爬虫 */ //引入需要的包 var request = require('request'); var cheerio = require('cheerio'); var mysql = require('mysql'); var connection = mysql.createConnection({ host : '127.0.0.1', user : 'root', password : '', database : 'spider' }); var url = "https://jn.zu.anjuke.com/fangyuan/p2/" /* * 请求数据 */ function dataRequest(dataurl) { request({ url:dataurl, method:'GET', },function (err,red,body) { //请求到body if(err){ console.log(dataurl); console.error('[ERROR]Collection' + err); return; } if(dataurl && dataurl == url){ dataPraseDolphin(body); } }) } /* * 保存到mysql */ function save(title,info,add) { var addSql = 'INSERT INTO node_room(id,title,info,address) VALUES(0,?,?,?)'; var addSqlParams = [title,info, add]; connection.query(addSql,addSqlParams,function (err, result) { if(err){ console.log(err.sql) console.log('[INSERT ERROR] - ',err.message); return; } console.log('--------------------------INSERT----------------------------'); console.log('保存数据',addSqlParams); console.log('-----------------------------------------------------------------\n\n'); }); } /* * 解析HTML */ function dataPraseDolphin(html) { var $ = cheerio.load(html); var rooms = $('.list-content').children('.zu-itemmod'); for(i=0;i<rooms.length;++i){ var room = rooms[i]; var title = $(room).find('.zu-info').find('h3').text().replace(/(^\s*)|(\s*$)/g, ""); var info = $(room).find('.zu-info').find('.tag').text().replace(/(^\s*)|(\s*$)/g, ""); var add = $(room).find('.zu-info').find('address').text().replace(/(^\s*)|(\s*$)/g, "").replace('\n','').replace(' ','').replace(/\s/g, ""); save(title,info,add); } } //发起请求 dataRequest(url);
代码地址:https://github.com/BoHongtao/base-nodejs-code/blob/master/spider-test.js
总结下,如果学过web后端语言,比如java,php,python的话,node学学挺好,毕竟目前node还是很强大的,但是仍然不建议新手入门学习,毕竟回调很恶心;