JS分布式爬虫


  1. 数据爬虫概述
    所谓网页爬虫,就是指把URL地址中指定的网络资源从网络流中读取出来,保存到指定的数据库

  2. 爬虫基本原理

  3. 爬虫分类
    批量爬虫
    增量爬虫

  4. 我们的数据爬虫
    分布式爬虫整体结构

中心服务器

提供为每一台spiser的接口

TASK_PATH = xxx/tasks,分发任务
PROXY_PATH = xxx/proxy,分发代理
RESULT_PATH = xxx/results,接受爬取结果

每一台spider工作情况

主要有一下三个步骤:

首先请求中心服务器的PROXY_PATH(获取代理), TASK_PATH,获取到等待爬取的tasks(每次获取100),生成待爬取队列,依次爬取每一个待爬取task;
在每次爬取之前,会调整爬取参数,为每次爬取任务加上代理ip;
每一个task爬取结束后会把结果统一push到待发送buffer中,当该tasks队列爬取完成之后,会对待发送buffer压缩后请求中心服务器RESULT_PATH,发送数据;
对失败任务进行重试(最大重试次数为3, 这里的重试并不是立即重试,而是通过重置任务状态进行重试);
爬虫任务数据格式(task)

1
2
3
4
5
6
7
8
9
{
url: xxxx, //启动url
project: xxx, //项目名称
category: ['normal' , 'webkit', 'img'], // 任务类型
script_name: xxxxx, //脚本名称
context: xxxxx, // 上下文参数
status: ['undo', 'delivered', 'succeed', 'failed'] //状态
attempts: x //重试次数
}

爬虫返回值数据格式
{
status: 200, //任务返回状态
task: tasks, //子任务
result: {xxxxx:xxx} //页面返回结果
}
爬虫返回数据存储结构

1
2
3
4
5
6
7
8
{
project: 'xxxx', //项目名称
script_name: 'xxxx.js', //脚本名称
created_at: new Date(), //时间
url: 'xxxx', //task url
data: data, //task 返回数据
task_id: 'xxxx' // task id
}

爬虫任务状态监控
使用聚合函数对tasks表中status字段进行统计(现在以时间日期为维度)

  1. 关于js爬虫具体情况

使用(自动化测试)框架phantomjs(幽灵)和casperjs(小精灵) ,访问官网下载安装
都是自动化测试框架,phantomjs可以理解为一个无界面的浏览器,可以通过流水线式的代码来驱动其页面的浏览行为,而后者是前者在易用性API上的一些封装。phantomjs提供的是一个无界面的webkit内核浏览器,所以无法覆盖IE浏览器(Trident内核)。Gecko内核的无界面浏览器已经有解决方案slimerjS,并且支持与phantomjs一模一样的API。casperjs 其默认是调用phantomjs 引擎的API,如果在运行casperjs 时加上--engine slimerjs 会调用slimerjs引擎API。

  1. 爬虫拓展
  • nightmarejs (恶梦)
    一个基于phantomjs的测试框架,使用Electron封装了一层。

  • 关于python 爬虫框架 scrapy

    1. 使用pip install scrapy
    2. 创建一个Scrapy项目scrapy startproject XXX
    3. 定义提取的Item
    4. 编写爬取网站的 spider 并提取 Item
    5. 编写 Item Pipeline 来存储提取到的Item(即数据)
    6. 运行爬虫scrapy crawl dmoz

文章作者: Callable
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Callable !
评论
  目录