数据爬虫概述
所谓网页爬虫,就是指把URL地址中指定的网络资源从网络流中读取出来,保存到指定的数据库爬虫基本原理
爬虫分类
批量爬虫
增量爬虫我们的数据爬虫
分布式爬虫整体结构
中心服务器
提供为每一台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 | { |
爬虫返回值数据格式
{
status: 200, //任务返回状态
task: tasks, //子任务
result: {xxxxx:xxx} //页面返回结果
}
爬虫返回数据存储结构
1 | { |
爬虫任务状态监控
使用聚合函数对tasks表中status字段进行统计(现在以时间日期为维度)
- 关于js爬虫具体情况
使用(自动化测试)框架phantomjs(幽灵)和casperjs(小精灵) ,访问官网下载安装
都是自动化测试框架,phantomjs可以理解为一个无界面的浏览器,可以通过流水线式的代码来驱动其页面的浏览行为,而后者是前者在易用性API上的一些封装。phantomjs提供的是一个无界面的webkit内核浏览器,所以无法覆盖IE浏览器(Trident内核)。Gecko内核的无界面浏览器已经有解决方案slimerjS,并且支持与phantomjs一模一样的API。casperjs 其默认是调用phantomjs 引擎的API,如果在运行casperjs 时加上--engine slimerjs
会调用slimerjs引擎API。
- 爬虫拓展
nightmarejs (恶梦)
一个基于phantomjs的测试框架,使用Electron封装了一层。关于python 爬虫框架 scrapy
- 使用
pip install scrapy
- 创建一个Scrapy项目
scrapy startproject XXX
- 定义提取的Item
- 编写爬取网站的 spider 并提取 Item
- 编写 Item Pipeline 来存储提取到的Item(即数据)
- 运行爬虫
scrapy crawl dmoz
- 使用