hn-failte's blog hn-failte's blog
首页
  • 前端文章

    • JavaScript
    • Vue
    • React
    • Webpack
    • 混合开发
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《React》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • HTML&CSS
  • HTML
  • CSS
  • CSS预处理
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 算法
  • 数据库
  • 操作系统
  • 工具
  • 学习
  • 面试
  • 心情杂货
  • 前端相关
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

hn-failte

前端cv仔
首页
  • 前端文章

    • JavaScript
    • Vue
    • React
    • Webpack
    • 混合开发
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《React》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • HTML&CSS
  • HTML
  • CSS
  • CSS预处理
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 算法
  • 数据库
  • 操作系统
  • 工具
  • 学习
  • 面试
  • 心情杂货
  • 前端相关
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 技术文档

  • GitHub技巧

  • Nodejs

    • nodejs递归读取所有文件
    • CMS框架推荐
    • Mock.js与Rap2模拟接口
    • 如何在Node和浏览器控制台中打印彩色文字
    • package.json详解
    • Node简单爬虫
      • 爬取思路
      • 源码说明
      • 效果
      • 声明
    • Node爬取大批量文件
  • 博客搭建

  • Algorithm

  • DataBase

  • OS

  • Tools

  • 技术
  • Nodejs
hn-failte
2018-12-29

Node简单爬虫

# Node简单爬虫

  • 最近一直在追火星的一本书,然后每次都要去网站看,感觉很麻烦,于是,想起用爬虫爬取章节,务实排,说干就干!

# 爬取思路

  • 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秒比较保险
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
33
34
35
36
37
38
39
40
41
42
43
44
45

# 效果

![Alt](https://hn-failte.github.io/assets/posts/js-node-spider-1.png#pic_center =30x30)

![Alt](https://hn-failte.github.io/assets/posts/js-node-spider-2.png#pic_center =30x30)

# 声明

  • 本文章仅供学习,爬取的资源请在爬取后的24小时内删除,勿将爬取到的东西商用,喜欢火星的可以支持火星哈。
编辑 (opens new window)
#Spider
上次更新: 2021/08/05, 12:37:41
package.json详解
Node爬取大批量文件

← package.json详解 Node爬取大批量文件→

最近更新
01
基于 Taro 的微信小程序优化指南
02-16
02
搭建一个极简混合开发架构
08-03
03
使用State Hook
04-06
更多文章>
Theme by Vdoing | Copyright © 2017-2023 hn-failte | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式