用node写的爬虫(一版)

来源:互联网 发布:python 双引号 变量 编辑:程序博客网 时间:2024/05/05 15:00

node爬虫

步骤1:正所谓“工欲善其事,必先利其器”
1)下载nodejs
2)下载JavaScript编辑器sublime
步骤2:建立工程
1)创建项目目录(我取做node_maricle)
2)在项目文件下npm init(一路Enter就行了,当然命名还是要的),完成后会生成一个package.json的文件。该文件包含了项目的基本信息。
3)安装第三方包(后面程序会直接调用包的模块)

说明:由于http模块、fs模块都是内置的包,因此不需要额外添加。

这里安装cheerio包(可以直接解析获取的html节点),和request包。

在项目文件中shift+右键进入dos中,然后
npm install cheerio –save

安装完cheerio包后,继续安装request包,
npm install request –save

说明:npm(nodejs package manager),nodejs包管理器;
–save的目的是将项目对该包的依赖写入到package.json文件中。(-g是全局安装)
现在才进入正题,爬取学校网站的学生信息。
创建子文件夹data(用来存信息)

var http = require('http');//好像没用到var fs = require('fs');//文件操作var cheerio = require('cheerio');//解析htmlvar request = require('request');//request请求var request = request.defaults({jar: true});//!!!!特别注意这里,默认情况下,cookies是禁用的。在defaults或options将jar设为true,使后续的请求都使用cookie.var all="";var i=999;request.post('http://hnust.hunbys.com/index.php/home/Public/mlogin.html', function (error, response, body) {  if (!error && response.statusCode == 200) {    console.log('登录成功!')    start('http://hnust.hunbys.com/index.php/course/Index/userinfo/id/12740.html');  }}).form({email: myemail, password: mypassword})//function start(url){    i++;    request.get(url, function (error, response, body) {        if (!error && response.statusCode == 200) {            var $ = cheerio.load(body); //采用cheerio模块解析html            var name = $(".pull-left h2").text().trim().substr(0,4);            var xueyuan = $(".zy_course_rl").children().eq(0).text().trim().substr(17,15);            var three = $(".zy_course_rl").children().eq(1).text().trim();            indexm = three.indexOf("专业:");            indexl = three.indexOf("|");            var zhuanye = three.slice(indexm,indexl)//专业            indexbj = three.indexOf("班级:")            var banji = three.substr(indexbj,10);            var sfz = $(".zy_course_rl").children().eq(2).text().trim().substr(3,18);            var dh = $(".zy_course_rl").children().eq(3).text().trim();            all += "姓名:"+name + xueyuan +"  "+zhuanye +sfz+dh+"\n";            console.log(all);            if (i=2000) {                savedContent($,all);            }                   }    })    var nextLink="http://hnust.hunbys.com/index.php/course/Index/userinfo/id/" + i+".html";     if (i <= 2000) {                        start(nextLink);    }}function savedContent($, news_title) {   //将新闻文本内容一段一段添加到/data文件夹下,并用新闻的标题来命名文件    fs.writeFile('./data/data2.txt', all, 'utf-8', function (err) {      if (err) {       console.log(err);      }    });}
0 0