1.1.4-0 • Published 4 years ago

spider-node v1.1.4-0

Weekly downloads
11
License
ISC
Repository
github
Last release
4 years ago

介绍

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 语法

node-schedule

spider.plan("秒 分 时 日 月 周几",()=>{
  return ['https://www.baidu.com']
})

API

urls = string || string[] || Set || (function():string||string[]|| Set)

methodargsinfo
starturls启动 url,可为数组或字符串
testurls以测试规则启动,不会自动匹配 url
usefunction注册下载中间件
rule(name,regexp,parse,...pipeline,config)=>Promise注册规则,如果最后一个 pipeline 不是 function 而是 object 时,将使用该值为配置进行注册,返回一个 Promise,当 rule 报错时可用.catch 捕获 (与 config 中定义 rule 一致)
pushurl,config新增请求,config 为 HttpConfig 并且拥有 meta,meta 值可以在 parse 中获取到
plancornRule,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时跳过该请求(可以重复)
  }
})
1.1.4-0

4 years ago

1.1.31

4 years ago

1.1.3

4 years ago

1.0.22

4 years ago

1.0.21

4 years ago

1.1.201

4 years ago

1.1.1

4 years ago

1.1.2

4 years ago

1.1.0

4 years ago

1.0.9

4 years ago

1.0.81

5 years ago

1.0.8

5 years ago

1.0.72

5 years ago

1.0.71

5 years ago

1.0.7

5 years ago

1.0.6

5 years ago

1.0.58

5 years ago

1.0.57

5 years ago

1.0.56

5 years ago

1.0.55

5 years ago

1.0.52

5 years ago

1.0.51

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.31

5 years ago

1.0.3

5 years ago

1.0.205

5 years ago

1.0.204

5 years ago

1.0.203

5 years ago

1.0.202

5 years ago

1.0.201

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago

0.4.6

5 years ago

0.4.5

5 years ago

0.4.4

5 years ago

0.4.2

5 years ago

0.4.1

5 years ago

0.4.0

5 years ago

0.3.21

5 years ago

0.3.2

5 years ago

0.3.1

5 years ago

0.3.0

5 years ago

0.2.152

6 years ago

0.2.151

6 years ago

0.2.14

6 years ago

0.2.13

6 years ago

0.2.12

6 years ago

0.2.11

6 years ago

0.2.1

6 years ago

0.2.0

6 years ago

0.1.6

6 years ago

0.1.5

6 years ago

0.1.4

6 years ago

0.0.4

6 years ago

0.1.3

6 years ago

0.1.2

6 years ago

0.1.1

6 years ago

0.1.0

6 years ago