用NodeJS写一个爬虫

简介

用NodeJS下一个爬虫,用来获取简书首页的文章,然后保存以txt文件的形式保存在本地,数量为20篇.

初始化项目

​ npm init || yarn init

安装依赖

​ npm install superagent cheerio —save || yarn add superagent cheerio

页面数据下载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const fs = require("fs")
const request = require("superagent")
const cheerio = require("cheerio")
let reptileUrl = "http://www.jianshu.com/"

request
.get(reptileUrl)
.end(function(err,res){
if(err){

}
else{
let $ = cheerio.load(res.text,{decodeEntities:false})
//每页有20篇文章,找到标题及其href的值
$("#list-container .note-list li").each(function(index,value){
let url = $(v).find(".title").attr("href")
//url即文章的链接,需要和reptileUrl拼接起来
getContent(url)
})
}
})

获取文章内容,保存在本地

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function getContent(url){
let adress = reptileUrl + url
request
.get(adress)
.end(function(err,res){
if(err){

}else{
let $ = cherrio.load(res.text,{decodeEntities:false})
//文章标题
let title = $(".article .title").text()
//文章内容
let content = ''
$(".article .show-content p").each(function(i, v, a) {
content += $(v).text();
})
//要写入的数据
let data = {
title: title,
content: content
}
//本地保存
fs.writeFile('../data/' + title + '.txt', JSON.stringify(data), 'utf-8', function(err) {
if (err) {

} else {
console.log("It's OK !")
}
})
}
})
}