Description
最近在捣鼓一个仿简书的开源项目,从前端到后台,一战撸到底。就需要数据支持,最近mock数据,比较费劲。简书的很多数据都是后台渲染的,很难快速抓api请求数据,本人又比较懒,就想到用写个简易爬虫系统。
项目初始化
安装nodejs,官网, 中文网。根据自己系统安装,这里跳过,表示你已经安装了nodejs。
选择一款顺手拉风的编辑器,用来写代码。推荐webstorm最近版。
webstorm创建一个工程,起一个喜欢的名字。创建一个package.json文件,webstorm快捷创建package.json非常简单。还是用命令行创建,打开Terminal,默认当前项目根目录,npm init,一直下一步。
可以看这里npm常用你应该懂的使用技巧
主要技术栈
- superagent 页面数据下载
- cheerio 页面数据解析
这是2个npm包,我们先下载在接着继续,下载需要时间的。
npm install superagent cheerio --save
接下啦简单说说这2个是啥东西
superagent 页面数据下载
superagent是nodejs里一个非常方便的客户端请求代码模块,superagent是一个轻量级的,渐进式的ajax API,可读性好,学习曲线低,内部依赖nodejs原生的请求API,适用于nodejs环境下。
请求方式
- get (默认)
- post
- put
- delete
- head
语法:request(RequestType, RequestUrl).end(callback(err, res 6FAB ));
写法:
request
.get('/login')
.end(function(err, res){
// code
});
设置Content-Type
- application/json (默认)
- form
- json
- png
- xml
- ...
设置方式:
1.
request
.get('/login')
.set('Content-Type', 'application/json');
2.
request
.get('/login')
.type('application/json');
3.
request
.get('/login')
.accept('application/json');
以上三种方效果一样。
设置参数
- query
- send
query
设置请求参数,可以写json对象或者字符串形式。
json对象{key,value}
可以写多组key,value
request
.get('/login')
.query({
username: 'jiayi',
password: '123456'
});
字符串形式key=value
可以写多组key=value,需要用&隔开
request
.get('/login')
.query('username=jiayi&password=123456');
sned
设置请求参数,可以写json对象或者字符串形式。
json对象{key,value}
可以写多组key,value
request
.get('/login')
.send({
username: 'jiayi',
password: '123456'
});
字符串形式key=value
可以写多组key=value,需要用&隔开
request
.get('/login')
.send('username=jiayi&password=123456');
上面两种方式可以使用在一起
request
.get('/login')
.query({
id: '100'
})
.send({
username: 'jiayi',
password: '123456'
});
响应属性Response
Response text
Response.text包含未解析前的响应内容,一般只在mime类型能够匹配text/json、x-www-form-urlencoding的情况下,默认为nodejs客户端提供,这是为了节省内存,因为当响应以文件或者图片大内容的情况下影响性能。
Response header fields
Response.header包含解析之后的响应头数据,键值都是node处理成小写字母形式,比如res.header('content-length')。
Response Content-Type
Content-Type响应头字段是一个特列,服务器提供res.type来访问它,默认res.charset是空的,如果有的化,则自动填充,例如Content-Type值为text/html;charset=utf8,则res.type为text/html;res.charset为utf8。
Response status
cheerio 页面数据解析
cheerio是一个node的库,可以理解为一个Node.js版本的jquery,用来从网页中以 css selector取数据,使用方式和jquery基本相同。
- 相似的语法:Cheerio 包括了 jQuery 核心的子集。Cheerio 从jQuery库中去除了所有 DOM不一致性和浏览器尴尬的部分,揭示了它真正优雅的API。
- 闪电般的块:Cheerio 工作在一个非常简单,一致的DOM模型之上。解析,操作,呈送都变得难以置信的高效。基础的端到端的基准测试显示Cheerio 大约比JSDOM快八倍(8x)。
- 巨灵活: Cheerio 封装了兼容的htmlparser。Cheerio 几乎能够解析任何的 HTML 和 XML document。
需要先loading一个需要加载html文档,后面就可以jQuery一样使用操作页面了。
const cheerio = require('cheerio');
const $ = cheerio.load('<ul id="fruits">...</ul>');
$('#fruits').addClass('newClass');
基本所有选择器基本和jQuery一样,就不一一列举。具体怎么使用看官网。
上面已经基本把我们要用到东西有了基本的了解了,我们用到比较简单,接下来就开始写代码了,爬数据了哦。