node爬虫扒小说
Step 1: 万年不变的初始化项目,安装依赖
cnpm i express cheerio superagent superagent-charset async -S
express 就不用多说了,比较流行的node框架
cheerio 页面数据解析模块。一般都习惯称它node版的jquery,专门用来操作网页dom元素,使用方式和jquery基本相同。
superagent superagent是nodejs里一个非常方便的客户端请求代码模块,superagent是一个轻量级的,渐进式的ajax API,可读性好,学习曲线低,内部依赖nodejs原生的请求API,适用于nodejs环境下。
superagent-charset 很明显,处理编码的。
async 见名知意,node的异步模块。
Step 2: 编写node程序
/*
以爬取起点小说某文为例
*/
// 1. 首先引入模块
const cheerio = require('cheerio')
const express = require('express')
const app = express()
const superagent = require('superagent')
require('superagent-charset')(superagent)
const async = require('async'); let total = 0 // 总章节数
let id = 0 // 计数器
const chapter = 10 // 爬取多少章
const url = 'https://book.qidian.com/info/1011146676#Catalog' // 章节列表页面
// 处理请求
app.get('/',(req,response,next)=>{
superagent.get(url).charset('UTF-8').end((err,res)=>{
var $ = cheerio.load(res.text); // 读取章节列表页面
let urls = []
total = $(".volume-wrap li").length // 获取所以章节元素拿到总章节数
// 循环获取每个章节的页面url并push进urls
$('.volume-wrap li').each(function(i,v){
if(i < chapter){
urls.push('http:' + $(v).find("a").attr('href'))
}
})
// 通过async去请求urls里的地址,并通过fetchUrl方法拆分数据。这里的async.mapLimit方法有点类似es6里的promise.all
async.mapLimit(urls,chapter,(url,callback)=>{
id++
fetchUrl(url,callback,id);
},(err,results)=>{
response.send(results); })
})
}) // 去空格和空格转义字符
function trim(str){
return str.replace(/(^\s*)|(\s*$)/g, '').replace(/ /g, '')
} // 将Unicode转汉字
function reconvert(str) {
str = str.replace(/(&#x)(\w{1,4});/gi, function ($0) {
return String.fromCharCode(parseInt(escape($0).replace(/(%26%23x)(\w{1,4})(%3B)/g, "$2"), 16));
});
return str
} // 加载每个章节并拆分数据返回
function fetchUrl(url,callback,id){
superagent.get(url)
.charset('UTF-8')
.end(function(err,res){
let $ = cheerio.load(res.text);
let arr = []
let content = reconvert($(".read-content").html()) const obj = {
id: id,
err: 0,
bookName: $('.text-info a').eq(0).text().substring(1),
title: $('.j_chapterName').text(),
content: content.toString()
}
callback(null,obj)
})
} // 监听窗口
const PORT = 8080
app.listen(PORT,function(){
console.log("server listening on " + PORT)
})
最后,运行node程序,本地打开localhost:8080 就可以看到数据了
node爬虫扒小说的更多相关文章
- 继续node爬虫 — 百行代码自制自动AC机器人日解千题攻占HDOJ
前言 不说话,先猛戳 Ranklist 看我排名. 这是用 node 自动刷题大概半天的 "战绩",本文就来为大家简单讲解下如何用 node 做一个 "自动AC机&quo ...
- Node爬虫
Node爬虫 参考 http://www.cnblogs.com/edwardstudy/p/4133421.html 所谓的爬虫就是发送请求,并将响应的数据做一些处理 只不过不用浏览器来发送请求 需 ...
- python爬虫之小说网站--下载小说(正则表达式)
python爬虫之小说网站--下载小说(正则表达式) 思路: 1.找到要下载的小说首页,打开网页源代码进行分析(例:https://www.kanunu8.com/files/old/2011/244 ...
- node爬虫gbk中文乱码问题
刚入坑node 写第二个node爬虫时,遇到了这个坑,记录一下. 主要步骤: 1.安装iconv-lite 输入npm install iconv-lite 2.将接收到的网页源码以二进制的方式存储下 ...
- 简单的node爬虫练手,循环中的异步转同步
简单的node爬虫练手,循环中的异步转同步 转载:https://blog.csdn.net/qq_24504525/article/details/77856989 看到网上一些基于node做的爬虫 ...
- node爬虫(简版)
做node爬虫,首先像如何的去做这个爬虫,首先先想下思路,我这里要爬取一个页面的数据,要调取网页的数据,转换成页面格式(html+div)格式,然后提取里面独特的属性值,再把你提取的值,传送给你的页面 ...
- node 爬虫 --- 批量下载图片
步骤一:创建项目 npm init 步骤二:安装 request,cheerio,async 三个模块 request 用于请求地址和快速下载图片流. https://github.com/reque ...
- node爬虫的几种简易实现方式
说到爬虫大家可能会觉得很NB的东西,可以爬小电影,羞羞图,没错就是这样的.在node爬虫方面,我也是个新人,这篇文章主要是给大家分享几种实现node 爬虫的方式.第一种方式,采用node,js中的 s ...
- 有趣的Node爬虫,数据导出成Excel
最近一直没更新了诶,因为学习Backbone好头痛,别问我为什么不继续AngularJs~因为2.0要出来了啊,妈蛋!好,言归正传,最近帮我的好基友扒数据,他说要一些股票债券的数据.我一听,那不就是要 ...
随机推荐
- vue-cli keep-alive用法以及activated,deactivated
keep-alive用法 <keep-alive>是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM. include: 字符串或正则表达式.只有匹配的组件会被 ...
- 一个简单的特效引发的大战之移动开发中我为什么放弃jquery mobile
我本想安静的做一个美男子,可是,老板不涨工资,反而,一月不如一月. 我为什么放弃jquery mobile插件选择自己写特效? 在开发中大家都知道效率很重要,一个好的工具可以在开发中大大提升效率,工作 ...
- .net项目技术选型总结
做.net开发已经几年了,也参与开发了很多大大小小的项目,所以现在希望总结出一套开发.net项目的常用技术,也为以后做项目技术选型的时候作为参考. 数据库 小型项目:SQLite(工具) 中大型项目: ...
- python的类变量与实例变量以及__dict__属性
关于Python的实例变量与类变量,先来看一段可能颠覆世界观的例子 #!/usr/bin/env python # -*- coding: utf_8 -*- # Date: 2016年10月10日 ...
- SQL partition by的用法
今天群里看到一个问题,在这里概述下:查询出不同分类下的最新记录.一看这不是很简单的么,要分类那就用Group By; 要最新记录就用Order By呗.然后在自己的表中试着做出来: 首先呢我把表中的数 ...
- yapi部署文档
windows 下 yapi部署文档 安装nodejs 安装mongodb 安装yapi 介绍 随着 web 技术的发展,前后端分离成为越来越多互联网公司构建应用的方式.前后端分离的优势是一套 Api ...
- Windows下vue-cli脚手架搭建入门<一>
简单了解Node.js.npm,安装Node.js,下载网址:http://nodejs.cn/download/ 查看node,npm安装成功与否.打开cmd命令行,输入命令 node-v .np ...
- git 命令小总结
下载代码 git clone http://admin@192.168.0.208:7990/scm/klvchen/tale.git 设置用默认户名和密码登录,注意 URI 前面不允许有 http, ...
- Excel破解工作表保护
宏运行 Public Sub Password_cracking() Const DBLSPACE As String = vbNewLine & vbNewLine Const AUTHOR ...
- 【读书笔记】iOS-storyboard-两个场景间的切换(二)
接着上一节 一,在storybord画布上面,新增加一个场景,即拖动一个View Controller到画布上面,同时建立一个button,名字为secondButton.如图所示. 二,点击第一个按 ...