前端开发经理招聘 |
海晏web前端开发招聘 |
合肥前端开发招聘信息 |
抓取后按分类生成文件夹 , 文件夹下生成txt , 只抓取到每篇文章的链接 (因为内容太过庞大),
ps:需要先安装cheerio 第三方模块 (npm install cheerio)
首先引用模块 :
javascript 代码
var http = require(‘http’) // http 模块
var cheerio = require(‘cheerio’) //html 解析
var fs = require(‘fs’) // fs 模块
然后创建一个总目录
javascript 代码
fs.mkdirSync(‘./极客学院Wiki/’) //同步模式创建”极客学院Wiki”目录,用来存放所有wiki。
console.log(‘创建”极客学院Wiki”目录成功。’)
接着抓取http://wiki.jikexueyuan.com/ , 获取所有分类栏目的标题和链接 , 为每个栏目都创建一个对应的文件夹 , 接着调用 getWikipage() 方法查看有没有分页的内容。
javascript 代码
http.get(‘http://wiki.jikexueyuan.com/’, function(res) {
var html
res.setEncoding(‘utf8’)
res.on(‘data’, function(data) {
html += data
})
res.on(‘end’, function() {
var $ = cheerio.load(html)
var list = $(‘#jdropdown li’)
list.each(function(i) {
var Title = $(this)
.find(‘.hd’)
.children(‘a’)
.text()
var Href =
‘http://wiki.jikexueyuan.com/’ +
$(this)
.find(‘.hd’)
.children(‘a’)
.attr(‘href’)
fs.mkdir(‘./极客学院Wiki/’ + Title + ‘/’, function(err) {
if (err) {
return console.error(err)
}
console.log(“子目录'” + Title + “‘创建成功。”)
getWikipage(Href, ‘./极客学院Wiki/’ + Title + ‘/’)
})
})
})
})
getWikipage()方法:先查看栏目下有没有分页 , 有则抓取每个页面 , 无则抓取当前页面 (使用getWikiChapter()方法抓取)
javascript 代码
function getWikipage(url, path) {
http.get(url, function(res) {
var html
res.setEncoding(‘utf8’)
res.on(‘data’, function(data) {
html += data
})
res.on(‘end’, function() {
var $ = cheerio.load(html)
if ($(‘#page-nav’).text() != ”) {
//抓取分页
var page = $(‘#page-nav’).find(‘a’).length – 2
for (var i = 1; i <= page; i++) {
getWikiChapter(url + ‘?page=’ + i, path)
}
} else {
getWikiChapter(url, path)
}
})
})
}
getWikiChapter() 方法 (抓取页面下的文章列表,获取每篇文章的链接、介绍、标题 , 最后调用newTxt() 创建txt文件)
javascript 代码
function getWikiChapter(url, path) {
http.get(url, function(res) {
var html
res.setEncoding(‘utf8’)
res.on(‘data’, function(data) {
html += data
})
res.on(‘end’, function() {
var $ = cheerio.load(html)
var wikilist = $(‘.thumbnail .border li’)
wikilist.each(function(i) {
var wikiTitle = $(this)
.find(‘h4’)
.text()
var wikiContent = $(this)
.find(‘.desc’)
.children(‘a’)
.text()
var wikiHref = $(this)
.find(‘.desc’)
.children(‘a’)
.attr(‘href’)
var TxtContent =
‘【wiki介绍】:\r\n’ +
wikiContent +
‘\r\n【链接】:\r\n’ +
wikiHref +
”
newTxt(wikiTitle, TxtContent, path)
})
})
})
}
newTxt() 方法 创建txt。
javascript 代码
function newTxt(Title, Content, path) {
fs.writeFile(path + Title + ‘.txt’, Content, function(err) {
if (err) {
return console.log(err)
}
console.log(‘创建 “‘ + Title + ‘.txt” 成功!’)
})
}
完整代码: 写完发现如果要接着抓取 , 那我得写出无数回调 , 感觉特麻烦 有没有什么方法解决~?
javascript 代码
var http = require(‘http’) // http 模块
var cheerio = require(‘cheerio’) //html 解析
var fs = require(‘fs’) // fs 模块
fs.mkdirSync(‘./极客学院Wiki/’) //同步模式创建”极客学院Wiki”目录,用来存放所有wiki。
console.log(‘创建”极客学院Wiki”目录成功。’)
http.get(‘http://wiki.jikexueyuan.com/’, function(res) {
var html
res.setEncoding(‘utf8’)
res.on(‘data’, function(data) {
html += data
})
res.on(‘end’, function() {
var $ = cheerio.load(html)
var list = $(‘#jdropdown li’)
list.each(function(i) {
var Title = $(this)
.find(‘.hd’)
.children(‘a’)
.text()
var Href =
‘http://wiki.jikexueyuan.com/’ +
$(this)
.find(‘.hd’)
.children(‘a’)
.attr(‘href’)
fs.mkdir(‘./极客学院Wiki/’ + Title + ‘/’, function(err) {
if (err) {
return console.error(err)
}
console.log(“子目录'” + Title + “‘创建成功。”)
getWikipage(Href, ‘./极客学院Wiki/’ + Title + ‘/’)
})
})
})
})
function getWikipage(url, path) {
http.get(url, function(res) {
var html
res.setEncoding(‘utf8’)
res.on(‘data’, function(data) {
html += data
})
res.on(‘end’, function() {
var $ = cheerio.load(html)
if ($(‘#page-nav’).text() != ”) {
//抓取分页
var page = $(‘#page-nav’).find(‘a’).length – 2
for (var i = 1; i <= page; i++) {
getWikiChapter(url + ‘?page=’ + i, path)
}
} else {
getWikiChapter(url, path)
}
})
})
}
function getWikiChapter(url, path) {
http.get(url, function(res) {
var html
res.setEncoding(‘utf8’)
res.on(‘data’, function(data) {
html += data
})
res.on(‘end’, function() {
var $ = cheerio.load(html)
var wikilist = $(‘.thumbnail .border li’)
wikilist.each(function(i) {
var wikiTitle = $(this)
.find(‘h4’)
.text()
var wikiContent = $(this)
.find(‘.desc’)
.children(‘a’)
.text()
var wikiHref = $(this)
.find(‘.desc’)
.children(‘a’)
.attr(‘href’)
var TxtContent =
‘【wiki介绍】:\r\n’ +
wikiContent +
‘\r\n【链接】:\r\n’ +
wikiHref +
”
newTxt(wikiTitle, TxtContent, path)
})
})
})
}
function newTxt(Title, Content, path) {
fs.writeFile(path + Title + ‘.txt’, Content, function(err) {
if (err) {
return console.log(err)
}
console.log(‘创建 “‘ + Title + ‘.txt” 成功!’)
})
}
前端开发招聘焦点科技 |
web前端开发华为招聘 |
前端开发2017招聘 |
评论前必须登录!
注册