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');//解析html
var 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);
}
});
}