基于nodeJS爬虫
来源:互联网 发布:手机淘宝申请账号注册 编辑:程序博客网 时间:2024/06/09 20:57
最新开始学nodeJS(前端的高大上)
先说说中间需要用到的第三方依赖吧
直接贴代码:
const http = require('http')const fs = require('fs')const cheerio = require('cheerio')const iconv = require('iconv-lite')let request = require('request');
##FS NODEJS文件系统
fs.appendFile('message.txt', 'data to append', (err) => {if (err) throw err;console.log('The "data to append" was appended to file!');});等等这里只列出一个,具体的请去参考官网API:http://nodejs.cn/api/fs.html#
#
##cheerio为服务器特别定制的,快速、灵活、实施的jQuery核心实现
var cheerio = require('cheerio'), $ = cheerio.load('<h2>Hello world</h2>');let htmls = $('h2').html();console.log(htmls
)
//=> Hello there!
#
## iconv-lite 为防止当前访问网页文件乱码而出现的,通过buffer字符流来进行转化进行相应的转换字符编码
iconv.decode(Buffer.Concat(html),'gb2312');
## 下面为源代码
//引入模块const http = require('http')const fs = require('fs')const cheerio = require('cheerio')const iconv = require('iconv-lite')let request = require('request');const zzxxxc = [ 'http://www.88dushu.com/xiaoshuo/69/69252/'];// http://www.biquge.cm/8/8726/let bookLists = [];let bookName = '';let m = 0;hrefs();/** * 初始化存储章节 */function hrefs() { if (m < zzxxxc.length) { http.get(zzxxxc[m], res => { const html = [] res.on('data', (chunk) => { html.push(chunk) }) res.on('end', () => { const html1 = iconv.decode(Buffer.concat(html), 'gb2312'); const $ = cheerio.load(html1); var ddsli = {}; let result = $('.mulu').find('li'); bookName = $('.rt h1').text(); let key = ''; // 用于存储书名 result.each((i, elem) => { let $hrefTag = $(elem).find('a') || false; if ($hrefTag) { $hrefTag.each((i, elem) => { let bookCharInfo = {}; if ($(elem).text().trim() !== '插图') { bookCharInfo.charName = $(elem).text().trim(); bookCharInfo.charUrl = zzxxxc[m] + $(elem).attr('href'); bookLists.push(bookCharInfo); } }); } }); m++; txtWord() }); }) } else { return ''; }}let i = 0;/** * 循环查询页面存储 */function txtWord() { let hrefUrls = bookLists[i].charUrl; request({ url: hrefUrls, headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36', }, encoding: null }, function(error, response, body) { if (response && response.statusCode == 200) { // 获取数据完毕后,使用iconv-lite转码,decedo中为Buffer对象,Buffer.concat为数组 const html1 = iconv.decode(body, 'gb2312'); const $ = cheerio.load(html1); var ddsli = {}; // 处理数据 var bokname = $('.novel h1').text() + '.'.replace(/./g, '\n'); var contentTxt = $('.yd_text2').text().trim().replace(/\s/g, "").replace(/。/g, '。\n') + '.'.replace(/./g, '\r\n'); fs.appendFile('./' + bookName + '.txt', (bokname + contentTxt), function(err) { if (err) {} else { if (i < bookLists.length - 1) { i++; console.log('开始下载==>' + bokname.replace(/[\r\n]/g, "")); txtWord(); } else { console.log('下载完成,进入下一本'); hrefs(); } } }); } else { txtWord(); } });}/** * 剔除空格 * @param {*字符串} str */function trim(str) { return str.replace(/(^\s*)|(\s*$)/g, '').replace(/ /g, '')}
如有转载:请提供出处谢谢
阅读全文
0 0
- 基于nodeJS爬虫
- 手把手教你做爬虫---基于NodeJs
- 基于Nodejs的第一个小爬虫
- 教你做爬虫---基于NodeJs
- 手把手教你做爬虫---基于NodeJs
- 手把手教你做爬虫---基于NodeJs
- 手把手教你做爬虫---基于NodeJs
- nodejs 爬虫
- nodejs 爬虫
- nodejs 爬虫
- nodejs豆瓣爬虫
- nodejs豆瓣爬虫
- NodeJs爬虫02
- NodeJS制作爬虫全过程
- NodeJs编写小爬虫
- nodejs爬虫编码问题
- 用Nodejs做爬虫
- nodejs 学习 - 简单爬虫
- eclipse调试debug时找不到源码source not found
- 严蔚敏版数据结构学习笔记(5):串
- Activiti(工作流)如何关联业务表
- android笔记:长按APP图标弹出快捷方式(shortcuts)
- win和Linux间的文件传输:rz和sz的安装
- 基于nodeJS爬虫
- bootstrap validate表单验证
- 冒泡排序
- TiDB 在 360 金融贷款实时风控场景应用
- 冒泡排序
- sql批量替换字段中的某个字符
- webpack 初印象
- kvm基本安装
- android 修改TextView中部分文字的颜色