node js简单爬虫实现
2016-11-07 19:29
85 查看
所谓爬虫,就是抓取网页上的信息,node js的简单爬虫是通过request模块和cheerio来实现的
首先要下载这两个包 npm install -g request --save-dev npm install -g cheerio --save-dev
这两个包就下好了
每一个网站都有一个robots协议 它规定了你可以爬取什么 不可以爬取什么
比如极客学院的robot协议
一般我们如果爬取了不应当爬取的数据 有时候也没关系 额
我是参考这个文章来编写的
http://chenxi.name/60.html
导入模块
/**
* Created by hcnucai on 2016/11/7.
*/
var request = require("request");
var cheerio = require("cheerio");
var path = require("path");
var express = require("express");
var fs = require("fs");规定url
var requrl = "http://jandan.net/ooxx/page-1319";随后加载进这个url 提取body 当res.statusBody为200的时候 表示加载成功 accquireData是个函数
//解析img标签
function accquireData(data) {
//cheerio解析data
var $ = cheerio.load(data);
//将所有的img放到一个数组中
var meizi = $('.text img').toArray();
// var table = $('.tag-cloud tbody tr').toArray();
// table.forEach(function (e) {
// var tempTf = cheerio.load(e);
// var href1 = tempTf('td a').toArray();
// href1.forEach(function (tempHref) {
// console.log(tempHref.attribs.href);
// })
// })
for(var i = 0; i < meizi.length;i++){
//用循环读出数组中每个src
var imgSrc = meizi[i].attribs.src;
//通过path.baseUrlForFileName 来读取文件名
var fileName = path.basename(imgSrc);
//随后进行下载图片的操作
downLoadImg(imgSrc,fileName,function () {
console.log(fileName + 'done');
})
}
}通过cheerio来加载html 返回一个DOM树 操作这个$符号 就是相当于jquery来操纵DOM树
.text 表示class 为text的 img表示其下的子元素img 随后遍历这个数组 attribs表示他的属性 属性中的src 来提取他的url
随后downLoadImg也是一个函数 来下载img
var downLoadImg = function (url,fileName,callBack) {
request.head(url,function (err,res,body) {
//返回图片的类型
console.log(("content-type:",res.headers["content-type"]));
//返回图片的大小
console.log(("content-length:",res.headers["content-length"]));
if(err){
console.log("err" + err);
return false;
}
console.log("res:" + res);
//下载文件的操作
request(url).pipe(fs.createWriteStream("/Users/hcnucai/Desktop/NodeDemo/images/" + fileName)).on('close',callBack);
})
}是一个函数 通过request(url).pipe() 文件产生输出流,监听结束的时候 传回一个闭包函数 表示这个文件下载完毕 这样就可以实现了 主要实现爬虫的就是cheerio函数 来解析DOM树 request来加载html代码
整体代码
/**
* Created by hcnucai on 2016/11/7.
*/
var request = require("request");
var cheerio = require("cheerio");
var path = require("path");
var express = require("express");
var fs = require("fs");
var requrl = "http://jandan.net/ooxx/page-1319";
//使用request模块类请求url
//使用cherrio来解析html
request(requrl,function (err,res,body) {
if(!err && res.statusCode == 200){
//返回请求页面的html
// console.log(body);
accquireData(body);
}
})
//解析img标签
function accquireData(data) {
//cheerio解析data
var $ = cheerio.load(data);
//将所有的img放到一个数组中
var meizi = $('.text img').toArray();
// var table = $('.tag-cloud tbody tr').toArray();
// table.forEach(function (e) {
// var tempTf = cheerio.load(e);
// var href1 = tempTf('td a').toArray();
// href1.forEach(function (tempHref) {
// console.log(tempHref.attribs.href);
// })
// })
for(var i = 0; i < meizi.length;i++){
//用循环读出数组中每个src
var imgSrc = meizi[i].attribs.src;
//通过path.baseUrlForFileName 来读取文件名
var fileName = path.basename(imgSrc);
//随后进行下载图片的操作
downLoadImg(imgSrc,fileName,function () {
console.log(fileName + 'done');
})
}
}
var downLoadImg = function (url,fileName,callBack) {
request.head(url,function (err,res,body) {
//返回图片的类型
console.log(("content-type:",res.headers["content-type"]));
//返回图片的大小
console.log(("content-length:",res.headers["content-length"]));
if(err){
console.log("err" + err);
return false;
}
console.log("res:" + res);
//下载文件的操作
request(url).pipe(fs.createWriteStream("/Users/hcnucai/Desktop/NodeDemo/images/" + fileName)).on('close',callBack);
})
}资源
http://chenxi.name/60.html https://cnodejs.org/topic/5203a71844e76d216a727d2e http://www.cnblogs.com/tianheila/p/5183733.html
首先要下载这两个包 npm install -g request --save-dev npm install -g cheerio --save-dev
这两个包就下好了
每一个网站都有一个robots协议 它规定了你可以爬取什么 不可以爬取什么
比如极客学院的robot协议
一般我们如果爬取了不应当爬取的数据 有时候也没关系 额
我是参考这个文章来编写的
http://chenxi.name/60.html
导入模块
/**
* Created by hcnucai on 2016/11/7.
*/
var request = require("request");
var cheerio = require("cheerio");
var path = require("path");
var express = require("express");
var fs = require("fs");规定url
var requrl = "http://jandan.net/ooxx/page-1319";随后加载进这个url 提取body 当res.statusBody为200的时候 表示加载成功 accquireData是个函数
//解析img标签
function accquireData(data) {
//cheerio解析data
var $ = cheerio.load(data);
//将所有的img放到一个数组中
var meizi = $('.text img').toArray();
// var table = $('.tag-cloud tbody tr').toArray();
// table.forEach(function (e) {
// var tempTf = cheerio.load(e);
// var href1 = tempTf('td a').toArray();
// href1.forEach(function (tempHref) {
// console.log(tempHref.attribs.href);
// })
// })
for(var i = 0; i < meizi.length;i++){
//用循环读出数组中每个src
var imgSrc = meizi[i].attribs.src;
//通过path.baseUrlForFileName 来读取文件名
var fileName = path.basename(imgSrc);
//随后进行下载图片的操作
downLoadImg(imgSrc,fileName,function () {
console.log(fileName + 'done');
})
}
}通过cheerio来加载html 返回一个DOM树 操作这个$符号 就是相当于jquery来操纵DOM树
.text 表示class 为text的 img表示其下的子元素img 随后遍历这个数组 attribs表示他的属性 属性中的src 来提取他的url
随后downLoadImg也是一个函数 来下载img
var downLoadImg = function (url,fileName,callBack) {
request.head(url,function (err,res,body) {
//返回图片的类型
console.log(("content-type:",res.headers["content-type"]));
//返回图片的大小
console.log(("content-length:",res.headers["content-length"]));
if(err){
console.log("err" + err);
return false;
}
console.log("res:" + res);
//下载文件的操作
request(url).pipe(fs.createWriteStream("/Users/hcnucai/Desktop/NodeDemo/images/" + fileName)).on('close',callBack);
})
}是一个函数 通过request(url).pipe() 文件产生输出流,监听结束的时候 传回一个闭包函数 表示这个文件下载完毕 这样就可以实现了 主要实现爬虫的就是cheerio函数 来解析DOM树 request来加载html代码
整体代码
/**
* Created by hcnucai on 2016/11/7.
*/
var request = require("request");
var cheerio = require("cheerio");
var path = require("path");
var express = require("express");
var fs = require("fs");
var requrl = "http://jandan.net/ooxx/page-1319";
//使用request模块类请求url
//使用cherrio来解析html
request(requrl,function (err,res,body) {
if(!err && res.statusCode == 200){
//返回请求页面的html
// console.log(body);
accquireData(body);
}
})
//解析img标签
function accquireData(data) {
//cheerio解析data
var $ = cheerio.load(data);
//将所有的img放到一个数组中
var meizi = $('.text img').toArray();
// var table = $('.tag-cloud tbody tr').toArray();
// table.forEach(function (e) {
// var tempTf = cheerio.load(e);
// var href1 = tempTf('td a').toArray();
// href1.forEach(function (tempHref) {
// console.log(tempHref.attribs.href);
// })
// })
for(var i = 0; i < meizi.length;i++){
//用循环读出数组中每个src
var imgSrc = meizi[i].attribs.src;
//通过path.baseUrlForFileName 来读取文件名
var fileName = path.basename(imgSrc);
//随后进行下载图片的操作
downLoadImg(imgSrc,fileName,function () {
console.log(fileName + 'done');
})
}
}
var downLoadImg = function (url,fileName,callBack) {
request.head(url,function (err,res,body) {
//返回图片的类型
console.log(("content-type:",res.headers["content-type"]));
//返回图片的大小
console.log(("content-length:",res.headers["content-length"]));
if(err){
console.log("err" + err);
return false;
}
console.log("res:" + res);
//下载文件的操作
request(url).pipe(fs.createWriteStream("/Users/hcnucai/Desktop/NodeDemo/images/" + fileName)).on('close',callBack);
})
}资源
http://chenxi.name/60.html https://cnodejs.org/topic/5203a71844e76d216a727d2e http://www.cnblogs.com/tianheila/p/5183733.html
相关文章推荐
- python实现简单爬虫功能
- python实现简单爬虫功能
- 简单的java爬虫实现
- PHP实现最简单爬虫原型
- Java实现一个简单的网络爬虫
- python使用tornado实现简单爬虫
- php实现简单爬虫的开发
- Jsoup-实现简单的网络爬虫
- Jsoup实现简单的爬虫
- Python实现简单的爬虫
- 网络爬虫(四) Java实现简单的网络爬虫
- php 爬虫的简单实现, 获取整个页面, 再把页面的数据导入本地的文件当中
- 实现一个go语言的简单爬虫来爬取CSDN博文(一)
- php实现简单爬虫的开发
- Selenium + PhantomJS + python 简单实现爬虫的功能
- Python实现爬取知乎神回复简单爬虫代码分享
- 网络爬虫(五)------------简单网络爬虫实现代码,记得要添加htmlpaser和htmlclient两个包
- 基于人人网的简单爬虫(二)——具体实现
- Python3_第一个简单爬虫开发_爬取百度百科1000个词条_参照慕课网教程实现
- python3简单实现微信爬虫