NodeJS简单爬虫
NodeJS简单爬虫
- 最近一直在追火星的一本书,然后每次都要去网站看,感觉很麻烦,于是,想起用爬虫爬取章节,务实派,说干就干!
爬取思路
- 1、该网站的页面呈现出一定的规律
- 2、使用NodeJS的request模块发起请求
- 3、对获取到的数据进行处理
- 4、使用NodeJS的fs模块将数据写入文件
源码说明
//声明需要的模块
var request = require('request');
var fs=require("fs");
//小说章节的标题
var title="";
//小说章节的内容
var article="";
//对应的网页序号
var i=1;
//写入流
var ws;
var get=()=>{
	//发起请求
	request('http://www.nitianxieshen.com/'+i+'.html', function (error, response, body) {
		try{
			if (!error && response.statusCode == 200) {
				//截取标题与段落
			    title = body.match(/<div class="post_title">([\s\S]*)<\/h1>/i)[0].split("</div>")[0];
			    article = body.match(/<div class="post_entry">([\s\S]*)<\/div>/i)[0].split("</div>")[0];
			    //去除多余的符号
			    title=title.replace("h1", "").replace("h1", "").replace(/[</a-z_"=>\r\n ]/g, "");
			    article=article.replace(/br/g, "\r\n").replace(/[</a-z1=_".:&;>]/g, "");
			    ws=fs.createWriteStream(title+".txt");
				ws.write(title+"\r\n\r\n","utf8");
				ws.write(article,"utf8");
				ws.end();
				console.log(title+".txt"+" 正在写入...");
				ws.on("finish", ()=>console.log("写入完成!"));
				ws.on("error", ()=>console.log("写入错误!"));
			}
		}catch(err){
			//部分章节的序号不连续,不要停止,等待自动爬取完就好,打印出该log后自动无视掉
			//好吧,其实后面有一段挺长的不连续的...有兴趣的可以再加个判断条件
			console.log("本次爬取失败");
			//目前更新的最新章节序号未到2900,确保能爬取完
			if(i>2900) clearInterval(timer);
		}
	})
}
var timer=setInterval(function(){
	get();
	i++;
}, 2000);//爬取的间隔时间不建议太短,1~2秒比较保险
效果


声明
- 本文章仅供学习,爬取的资源请在爬取后的24小时内删除,勿将爬取到的东西商用,喜欢火星的可以支持火星哈。
NodeJS简单爬虫的更多相关文章
- nodejs的简单爬虫
		闲聊 好久没写博客了,前几天小颖在朋友的博客里看到了用nodejs的简单爬虫.所以小颖就自己试着做了个爬博客园数据的demo.嘻嘻...... 小颖最近养了条泰日天,自从养了我家 ... 
- nodejs实现简单爬虫
		nodejs结合cheerio实现简单爬虫 let cheerio = require("cheerio"), fs = require("fs"), util ... 
- NodeJS制作爬虫全过程
		这篇文章主要介绍了NodeJS制作爬虫的全过程,包括项目建立,目标网站分析.使用superagent获取源数据.使用cheerio解析.使用eventproxy来并发抓取每个主题的内容等方面,有需要的 ... 
- Python简单爬虫入门三
		我们继续研究BeautifulSoup分类打印输出 Python简单爬虫入门一 Python简单爬虫入门二 前两部主要讲述我们如何用BeautifulSoup怎去抓取网页信息以及获取相应的图片标题等信 ... 
- [Java]使用HttpClient实现一个简单爬虫,抓取煎蛋妹子图
		第一篇文章,就从一个简单爬虫开始吧. 这只虫子的功能很简单,抓取到”煎蛋网xxoo”网页(http://jandan.net/ooxx/page-1537),解析出其中的妹子图,保存至本地. 先放结果 ... 
- 简单爬虫,突破IP访问限制和复杂验证码,小总结
		简单爬虫,突破复杂验证码和IP访问限制 文章地址:http://www.cnblogs.com/likeli/p/4730709.html 好吧,看题目就知道我是要写一个爬虫,这个爬虫的目标网站有 ... 
- Python简单爬虫入门二
		接着上一次爬虫我们继续研究BeautifulSoup Python简单爬虫入门一 上一次我们爬虫我们已经成功的爬下了网页的源代码,那么这一次我们将继续来写怎么抓去具体想要的元素 首先回顾以下我们Bea ... 
- GJM : Python简单爬虫入门(二) [转载]
		感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ... 
- python 简单爬虫diy
		简单爬虫直接diy, 复杂的用scrapy import urllib2 import re from bs4 import BeautifulSoap req = urllib2.Request(u ... 
随机推荐
- eclipse修改工作目录颜色
			转载请注明本地址,http://blog.csdn.net/u013173247/article/details/41676495 经常用Eclipse的朋友都应该清楚,Eclipse的白背景不知道晃 ... 
- Docker 简介,入门
			1.简介 Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行 ... 
- day37 异步回调和协程
			异步回调 """ 异步任务使用场景 爬虫 1.从目标站点下载网页数据 本质就是HTML格式字符串 2.用re从字符串中提取出你需要的数据 ""&quo ... 
- truecrype加密卷的使用
			truecrype7.1 文件加密 隐藏加密 密钥加密码双重保护 
- [leetcode]13. Roman to Integer罗马数字转整数
			Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 ... 
- Linux查看某个进程的线程
			线程是现代操作系统上进行并行执行的一个流行的编程方面的抽象概念.当一个程序内有多个线程被叉分出用以执行多个流时,这些线程就会在它们之间共享特定的资源(如,内存地址空间.打开的文件),以使叉分开销最小化 ... 
- JavaSE 初学进度条JProgressBar
			预备知识 创建进度条类后将其直接加入JFrame看看效果 public class JProgressBarDemo2 { public static void main(String args[]) ... 
- linux 查看机器cpu核数
			CPU总核数 = 物理CPU个数 * 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数 查看CPU信息(型号) [root@AAA ~]# cat /p ... 
- HTML中的table导出为Excel文件
			<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
- python_day1_数据类型
			数据类型: python基本数据类型有:int(整型),str(字符串),list[](列表),dict{}(字典),li()(元祖)bool(布尔) 注:还有一个Long(长整型),python3里 ... 
