极简网络蜘蛛爬虫,适用任何网站,只需设置一条规则,就可以把你想要网站上的内容整理出来,非常方便,简单!
- 修复错误
- 优化程序
- 保证输出的数据不会影响到核心程序的处理
- 在 rules 中 cb 增加参数 hash,data
- 完善说明文档
- 修复程序无法识别多条规则,导致每次只显示最后一条的问题
- 修复因为无法解析网页内容导致程序终止
- 修复程序无法成功启动问题
- 弃用 crawler.js, 改用 superagent 模块
- 增加 debug 颜色分类
- 重构代码
- 新添加 rules.cb 函数,处理复杂的值,最后一定要用 return 返回
- 优化核心程序,能够访问更多的网页
- 增加完成操作'done'返回函数
- 添加线程处理
- 修改规则
- 添加一些规则示例(在 test 目录)使用时不设置 links 将自动运行示例
npm install spider.io --save
const Spider = require("spider.io");
new Spider({
  callback: function(hash, data) {
    console.log(hash, data);
  },
  run: true //立即运行
});OR
const Spider = require("spider.io");
new Spider({
  callback: function(hash, data) {
    console.log(hash, data);
  }
}).run();const options = {
  init: {
    debug: false,
    delay: 1000,
    timeout: 5000,
    retrys: 3,
    threads: 1,
    loop: false
  },
  links: {
    title: "",
    hash: "",
    url: "",
    rules: [
      // 列表类型的数据,带下一级处理
      {
        list: "a",
        rule: {
          url: {
            // 同级包含links的,必须有此参数
            type: "href",
            text: ""
          },
          title: {
            type: "text",
            text: ""
          }
        },
        links: []
      },
      // 普通类型的数据
      {
        rule: {
          url: {
            // 同级包含links的,必须有此参数
            type: "href",
            text: ""
          },
          title: {
            type: "text",
            text: ""
          }
        }
      },
      // 数组形式的数据
      {
        key: "",
        list: "",
        rule: {
          url: {
            // 同级包含links的,必须有此参数
            type: "href",
            text: ""
          },
          title: {
            type: "text",
            text: ""
          }
        }
      },
      // 自定义处理返回数据,会合并上一级数据
      {
        cb: ($, init) => {
          // $ -> 为格式化的dom对象,可以直接操作,语法规则请查看 jQuery
          // init -> {hash, data}
          // ...code
          // 如果同级包含links,必须要有返回值,并且要包含url;可以返回 array 或 object
          // return [{url: ''}] or {url: ''};
        }
      }
    ]
  },
  callback: (hash, data) => {
    // 数据以单条记录返回,并不会一次返回所有值
  },
  done: () => {
    // 全部处理完毕后回调该函数
  }
};| 参数名 | 使用说明 | 默认值 | 
|---|---|---|
| debug | 输出调试信息,包括(网站访问时间,网站访问的内容) | false | 
| delay | 设置每个网站之间访问延迟 | 1000 | 
| timeout | 设置网站访问超时时间 | 5000 | 
| retrys | 设置网站访问重试次数 | 3 | 
| threads | 设置线程数 | 1 | 
| loop | 结束后是否自动重新开始 | false | 
headers (主参数)(具体说明请查看 superagent)
| 参数名 | 使用说明 | 类型 | 必须 | 
|---|---|---|---|
| title | 用于说明规则的作用 | text | × | 
| hash | 用作识别码,在 callback 中完全返回 | 不限制 | × | 
| url | 访问的网址 | text/array | √ | 
| rules | 应用于当前网址的规则 | array/object | √ | 
| max | 当 url 中包含{i}时,设置 i 的最大值 | number | × | 
| min | 当 url 中包含{i}时,设置 i 的最小值, 设置此值必须要设置 max,此默认值:1 | number | × | 
| 参数名 | 使用说明 | 类型 | 必须 | 
|---|---|---|---|
| list | 设置列表开始地址 | text | × | 
| rule | 设置获取的内容 | array/object | × | 
| links | 对于上一层的循环事件中连接另一规则 | array/object | × | 
| cb | 直接用函数操作,必须要返回值,$为格式化网站内容,必须要返回值 | function($) | × | 
| 参数名 | 使用说明 | 类型 | 
|---|---|---|
| key | 返回值为<key><text>位置的<type>属性值 | text | 
使用方法:
{
    <key>: {
        type: 'text|val|html|href|src|....', //可以自己设置属性
        text: ''                             //对于循环事件中,可以不设置值
    }
}在使用 links 时,此规则中必须包含 list,并且 rule 中必须包含<key>为 url
在连接的规则中会自动将列表中获取的 url,对 links 的 url 逐个替换,生成新的规则。
获取数据后的返回函数,返回值:
| 参数名 | 使用说明 | 类型 | 
|---|---|---|
| hash | 返回该条规则中设置的 hash,不做处理,直接返回,用作规则识别 | 不限制 | 
| data | 逐个返回最后一层获取的数据 | json |