一constrequest=require('request');request封装了httpnpmrequest(url,(err,req)=>{letbody=req.body})两个constcheerio=require('cheerio');解析返回的html并支持jqlet$=cheerio.load(body,{decodeEntities:false});三个lodash非常有用的函数_.isObject()_.isString()捕获过程包括request对象发送一个http请求到url到html然后开始回调并用cheerio加载我们的body并使用accessing的语法jq访问元素并获取我们的东西。lib封装的过程拆分:请求部分交给spider.js入口,解析部分和parse.js处理spider.js模块返回一个函数完成请求的发送。returnrequest(opts)spider需要做的其实是完成对捕获配置参数的封装。捕捉业务,抽象。module.export=蜘蛛;之前写过一个简单爬取课程目录的爬虫,今天写一个图片爬虫。基本思路是通过查看代码,观察我们要批量爬取资源的站点的url请求,找出一些规律。,不同网站的复杂度是不一样的。通常爬取图片的计算比较简单,解析规则,构造请求页面地址,nodejs模块request模拟请求页面数据(简单的静态页面可能需要模拟ajax请求拦截数据),使用cheerio模块来从请求的页面数据中解析出我们需要的资源地址(一个类似jquery的DOM库),最后进行简单的批量下载(瞬间发送大量请求可能会被站点调和,所以一次性的时候爬取量大,注意async限制异步和并发请求量,并发控制要根据不同站点区别对待,这里暂不做)教程1.创建项目创建文件夹mkdirimage_spider&&cdimage_spider创建依赖文件package.jsonnpminit下载模块npminstallasynccheerioscolorsrequest--save-devfs和path模块都是nodejs自带的,主要有以下两个,一个是request模块和cheerio模块,附有颜色模块。简单来说,request模块用于请求一个网页,cheerio解析请求的网页,即从html中解析出图片的src地址,并使用request获取页面的htmlbody并返回HTML请求的页面,然后我们应该使用cheerio模块来解析这个页面,这是analysisData()函数所做的2.创建index.jsvimindex.js按esc并输入:wq保存并退出3.写入index.jsconstfs=require('fs');constpath=require('路径');constrequest=require('请求');constcheerio=require('cheerio');constcolors=require('颜色');constpackagejson=require('./package.json');console.log("version"+packagejson.version.cyan)//测试站点如jandan.net/ooxx/page-1000varurltxt='http://jandan.net/ooxx/page-',startpage=1200,//起始页endpage=1300,sourcedir='images',//资源目录名picdir=sourcedir+''+startpage+'_'+endpage+'/',creatdir='./'+picdir;//------------------------------------------//创建图片存放目录//fs.mkdir这里有个隐患。直接使用它创建一个已有的文件夹会报错,在不存在的一级目录下创建二级目录也会报错。封装fs.mkdir后会被修改//----------------fs.mkdir(creatdir,function(err){if(err){throwerr};//letnewsourcesrc='目录'+creatdir+'创建成功';console.log(newsourcesrc.cyan);});//------------//抓取指定范围页面//------------console.log('--------------开始抓取页面内容----------------'.cyan);for(vari=startpage;i
