spider-node
v1.1.4-0
Published
爬虫工具,根据传入的配置和规则爬取数据
Downloads
31
Readme
介绍
node 爬虫工具,根据配置进行网络请求,通过正则匹配对应各个规则的解析函数,自动推导网站编码,post 请求,定时任务,日志,可以通过自定义中间件的形式添加代理,默认不携带 cookie,如果需要在 config 中写入(或者在中间件中动态添加),通过 maxConnect 和 delay 来限制同时访问次数,网络请求使用了request,参照它来进行相应的配置.
定时任务采用node-schedule进行处理
内置节点解析cheerio
不再内置去重,如果需要简单的去重可以引用[Deduplication]进行处理
npm i spider-node
-- const spiderNode = require('spider-node').default
or es6
-- import spiderNode from 'spider-node'
const spider = new spiderNode(config) // config请参照下方,具体使用方式可以参照test中的测试用例
spider.start('https://www.baidu.com')
config
{
name:'spider', // 名称
log:true,// 是否打印日志
http:{
maxConnect?: number // 规则默认的最大连接 如果规则本身没有制定则会继承此设置(如果为1,则会等待上一个任务结束后再次发送任务)
delay?: number // 每次请求后的等待时间
charset?:string // 编码方式 如果是html文本 将用于解析默认为: utf-8
meta?: { // 可携带自定义信息
[key: string]: any
},
...requestConfig // requets配置
},
rules:[
{
name:'ruleName', // 规则名称
test: /regExp/,
config:{ // rule 配置
include:boolean, // 是否从url中按照规则匹配url (true)
baseUrl:'', // 从文件自动匹配url时,将会默认根据父级url进行拼接,如果提供此值,将使用它进行解析url
maxConnect?:number, // 最大连接数(如果没有设置则继承http中的最大连接数
delay?:number // 单个规则的等待时间(如果没有设置则继承http中的delay
http:HttpConfig, // 单独配置网络配置,同上
meta:{ // 可携带自定义信息 可在处理函数中修改
}
},
async parse(url,data,selector,config,spider){
url // url
data // 数据
selector // cheerio解析器
config // 该url的配置,可以取出meta response可以查看原始返回数据
spider // 爬虫实例,可以调用push进行添加请求(可通过 spider.push(url,{meta:{}}))的方式传递信息
},
async pipeline(item){
// parse的返回值将进入
},
error(url,error,config,spider){
// 错误后调用
}
}
],
async open(){
// 启动时调用
},
async close(){
// 结束时调用
},
downloadMiddleware:[
async (config)=>{
// 下载中间件
// return false 中断请求
// return config 可改变config
}
],
errorMiddware:[
(
url,error,config,spider
)=>{
// 下载失败中间件
}
]
}
定时任务 遵循 corntab 语法
spider.plan("秒 分 时 日 月 周几",()=>{
return ['https://www.baidu.com']
})
API
urls = string || string[] || Set || (function():string||string[]|| Set)
| method | args | info | | ------ | :---------------------------------------------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | start | urls | 启动 url,可为数组或字符串 | | test | urls | 以测试规则启动,不会自动匹配 url | | use | function | 注册下载中间件 | | rule | (name,regexp,parse,...pipeline,config)=>Promise | 注册规则,如果最后一个 pipeline 不是 function 而是 object 时,将使用该值为配置进行注册,返回一个 Promise,当 rule 报错时可用.catch 捕获 (与 config 中定义 rule 一致) | | push | url,config | 新增请求,config 为 HttpConfig 并且拥有 meta,meta 值可以在 parse 中获取到 | | plan | cornRule,urls,immediate:是否立即执行第一次 | 定时任务请求,接收 corntab 语法的规则,将在特定时间执行检测,如果处于休眠状态,将再次读取 urls 启动 | | cancel | 无 | 关闭进程 |
请求中间件
Deduplication
import {Deduplication},spiderNode from 'spider-node';
const spider = new spiderNode({
downloadMiddleware:[
Deduplication()
]
})
spider.push(`url`,{
meta:{
ttl: 0, // 过期的时间(秒),为0时不会过期,
repeat:true // 为true时跳过该请求(可以重复)
}
})