Nodejs——简单小说爬虫实现

 1 //引入模块
 2 const http = require(‘http‘)
 3 const fs = require(‘fs‘)
 4 const cheerio = require(‘cheerio‘)
 5 const iconv = require(‘iconv-lite‘)
 6 //第一章url
 7 const url = ‘http://www.81zw.com/book/8634/745331.html‘
 8 //开始章节数
 9 let i = 1
10 //最大获取章节数
11 let num = 100
12
13 function main(url) {
14     startRequest(url)
15 }
16
17 function startRequest(url) {
18     http.get(url, res => {
19         //定义空数组存放html
20         const html = []
21         res.on(‘data‘, (chunk) => {
22             //把数据块添加进数组
23             html.push(chunk)
24         })
25         res.on(‘end‘, () => {
26             //获取数据完毕后,使用iconv-lite转码,decedo中为Buffer对象,Buffer.concat为数组
27             const html1 = iconv.decode(Buffer.concat(html), ‘gbk‘)
28             //使用cheerio解析html,cheerio模块的语法跟jQuery基本一样
29             const $ = cheerio.load(html1, {decodeEntities: false})
30             //处理数据
31             const title = $(‘.bookname h1‘).text()
32             const arr = []
33             const content = $("#content").html()
34             //分析结构后分割html
35             const contentArr = content.split(‘<br><br>‘)
36             contentArr.forEach(elem => {
37                 //去除内容的两端空格和&nbsp;
38                 const data = trim(elem.toString())
39                 arr.push(data)
40             })
41             const bookName = $(".con_top a").eq(2).text()
42             //定义存入数据库的对象
43             const obj = {
44                 id: i,
45                 err: 0,
46                 bookName: bookName,
47                 title: title,
48                 content: arr
49             }
50
51             let url2 = url.split(‘/‘)[url.split(‘/‘).length - 2]
52             const link = $(".bottem2 a").eq(2).attr(‘href‘)
53             //获取当前章节的下一章地址,递归调用fetchPage
54             const nextLink = `http://www.81zw.com/book/${url2}/${link}`
55             saveContent(obj, nextLink)
56             console.log(`第${i + 1}章:${nextLink}`)
57             i++
58             if (i <= num) {
59                 setTimeout(() => {
60                     main(nextLink)
61                 }, 100)
62             }
63         })
64     })
65 }
66
67 function saveContent(obj, nextLink) {
68     console.log(`${i}--${obj.title}`)
69     //判断书名文件夹是否存在,不存在则创建
70     if (!fs.existsSync(`data/${obj.bookName}`)) {
71         fs.mkdirSync(`data/${obj.bookName}`)
72     }
73     //写入json文件
74     fs.writeFile(`./data/${obj.bookName}/chapter${i}.json`, JSON.stringify(obj), ‘utf-8‘, err => {
75         if (err) throw err
76     })
77 }
78
79 function trim(str) {
80     return str.replace(/(^\s*)|(\s*$)/g, ‘‘).replace(/&nbsp;/g, ‘‘)
81 }
82
83 main(url)

生成文件

时间: 2024-11-04 15:24:44

Nodejs——简单小说爬虫实现的相关文章

视频博文结合的教程:用nodejs实现简单的爬虫

先来段求分小视频: https://www.iesdouyin.com/share/video/6550631947750608142/?region=CN&mid=6550632036246555405&titleType=title&timestamp=1525407578&utm_campaign=client_share&app=aweme&utm_medium=ios&iid=30176260384&utm_source=qq&am

nodejs实现简单的爬虫

闲着无聊就想鼓捣点东西玩玩,所以决定用node做个爬虫来爬点数据.查了些资料鼓捣了一段时间也算是弄出了个简单的爬虫. 目前这只小爬虫还是有不少缺陷,不过爬点简单的静态页面上的内容已经足够了. 详细的使用说明我就不介绍了,在github中有.地址:https://github.com/XLandMine/node-crawler 相关代码的说明我也都有注释,需要注意的是我对于爬取深度的理解是url的path有几个‘/’即为几层深度,默认为5. 主要的实现步奏就是利用http或者https模块发送r

NodeJS写个爬虫,把文章放到kindle中阅读

这两天看了好几篇不错的文章,有的时候想把好的文章 down 下来放到 kindle 上看,便写了个爬虫脚本,因为最近都在搞 node,所以就很自然的选择 node 来爬咯- 本文地址:http://www.cnblogs.com/hustskyking/p/spider-with-node.html,转载请注明源地址. 所谓爬虫,可以简单理解为利用程序操作文件,只是这些文件不在本地,需要我们拉取过来. 一. 爬虫代码解析 1. 拿到目标页码源码 Node 提供了很多接口来获取远程地址代码,就拿

一次使用NodeJS实现网页爬虫记

前言 几个月之前,有同事找我要PHP CI框架写的OA系统.他跟我说,他需要学习PHP CI框架,我建议他学习大牛写的国产优秀框架QeePHP. 我上QeePHP官网,发现官方网站打不开了,GOOGLE了一番,发现QeePHP框架已经没人维护了.API文档资料都没有了,那可怎么办? 毕竟QeePHP学习成本挺高的.GOOGLE时,我发现已经有人把文档整理好,放在自己的个人网站上了.我在想:万一放文档的个人站点也挂了, 怎么办?还是保存到自己的电脑上比较保险.于是就想着用NodeJS写个爬虫抓取需

C#最基本的小说爬虫

新手学习C#,自己折腾弄了个简单的小说爬虫,实现了把小说内容爬下来写入txt,还只能爬指定网站. 第一次搞爬虫,涉及到了网络协议,正则表达式,弄得手忙脚乱跑起来效率还差劲,慢慢改吧. 爬的目标:http://www.166xs.com/xiaoshuo/83/83557/ 一.先写HttpWebRequest把网站扒下来 这里有几个坑,大概说下: 第一个就是记得弄个代理IP爬网站,第一次忘了弄代理然后ip就被封了..... 第二个就是要判断网页是否压缩,第一次没弄结果各种转码gbk utf都是乱

Python---BeautifulSoup 简单的爬虫实例

对python自动化比较熟的同学,很多都懂一些爬虫方法,有些还研究的很深,下面呢我介 绍一个简单的爬虫实例,供大家参考.当然里面有很多需求是可以再学习的,下载进度的显 示.下载完成的提示等等. 一.首先我们要研究爬虫网站的架构,我这里已ring.itools.cn为例,我需要爬的是铃声. 大家可以自己去分析,这个网站的架构比较简单就不讲了. 我们最终要获取的是下面两个信息: 二.我们写下面的脚本来获取 上面的脚本呢,获取到songname和playaddr都是一组数据,即都是列表,我们需要把 他

Web Spider实战1——简单的爬虫实战(爬取&quot;豆瓣读书评分9分以上榜单&quot;)

1.Web Spider简介 Web Spider,又称为网络爬虫,是一种自动抓取互联网网页信息的机器人.它们被广泛用于互联网搜索引擎或其他类似网站,以获取或更新这些网站的内容和检索方式.它们可以自动采集所有其能够访问到的页面内容,以供搜索引擎做进一步处理(分检整理下载的页面),而使得用户能更快的检索到他们需要的信息. 2.一个简单的网络爬虫案例 作者在浏览网页的时候看到豆瓣书单的网页(首页),如下所示: 因为书单共有409本书,17个页面,若是要一个个浏览完,需要较长的时间,想要保存好书单,那

用python3.x与mysql数据库构建简单的爬虫系统(转)

这是在博客园的第一篇文章,由于本人还是一个编程菜鸟,也写不出那些高大上的牛逼文章,这篇文章就是对自己这段时间学习python的一个总结吧. 众所周知python是一门对初学编程的人相当友好的编程语言,就像本屌丝一样,一学就对它产生好感了!当然,想要精通它还有很多东西需要学习.那废话不多说了,下面我就来说一下如何用python3.x与mysql数据库构建一个简单的爬虫系统(其实就是把从网页上爬下来的内容存储到mysql数据库中). 首先就是搭建环境了,这里就简介绍一下我的环境吧.本机的操作系统是w

python 一个简单的爬虫(1)

1.一个简单的爬虫:爬取豆瓣的热门电影的信息 技能:获取网页源码,正则表达式,函数调用,全局变量的定义 1 #! /usr/bin/env python 2 # -*- coding=utf-8 -*- 3 import requests 4 import json 5 import re 6 import sys 7 reload(sys) 8 sys.setdefaultencoding("utf-8") 9 classinfo = [] 10 f = open('info.txt