爬虫架构设计

本文主要介绍爬虫系统的架构,具体的爬取细节和所使用的语言都可以自由选择。

以下是我从网上截取的一位前辈提炼的,对于爬虫系统的要求,我觉得很有道理。

我的设计尽量依据以上七条原则。

首先我觉得一个完整爬虫系统应该包括三个子系统:页面爬取系统,内容入库系统,内容管理系统。

三个系统之间必须低耦合,以实现分布式和可伸缩性的要求。

页面爬取系统负责从第三方页面抓取内容,并提交到内容入库系统的原始数据队列中。

内容入库系统会维护一个原始数据队列,实现一些去重以及基本的内容有效性判断,经过审核后的数据才可以进入数据库中。

内容管理系统主要提供一个管理后台,针对数据库内的内容进行人工的审核和编辑。

使用者三个系统的分工合作,可以基本实现以上的一些硬性需求。相应的也需要两到三种类型的服务器,爬虫服务器/数据服务器/运维服务器。对于数据量要求并不高的情况,这三种服务器可以重叠成同一台服务器。爬虫服务器用来部署页面爬取系统,数据服务器用来部署内容入库系统以及数据库,运维服务器主要用来部署内容管理系统。一旦数据量比较大的情况下,压力会比较大的可能就是数据服务器了。之所以将数据库和内容入库系统划分到了一类服务器里面,主要是因为两者之间的操作过于频繁,在同一台服务器上会避免带宽带来的限制。

下面分析一些具体的实现方案。

队列的实现,整套系统中会有好几个队列,相应的都会有其自身队列的管理机制,不论其具体逻辑是什么,使用的技术都推荐使用redis数据库来做。访问速度快,较大数据量处理方便灵活。

页面爬取系统,主要是根据自身需求对于各个目标网站进行爬取,每个不同的目标网站可能有不同的更新周期,所以爬取的循环周期也要相应的注意,尽量避免不必要的服务器开销。所以爬取系统也需要维护一个任务列表,按照惯例任务列表使用redis来实现队列,而且需要对单个任务的爬取周期要有定制要求。有任务列表就需要有一套任务发布和删除的程序来向列表中插入和删除数据,还要有一套执行任务的程序来执行爬取。执行之前需要先判断当前是否处于该任务的爬取周期内,如果在就执行爬取,否则跳过(注意:任务执行完成后不会从队列中移除,任务的发布和移除操作都只在任务发布移除程序中做)。任务列表是被循环执行的,也就是每次执行到末尾任务后,又重新从头部任务开始重新遍历。爬取系统很多人都喜欢使用python语言来做,python做爬虫代码相当精简,也有一些比较不错的框架,我一般是用django结合一些其他的插件感觉够用。

内容入库系统,首先是原始数据队列,用来接收来自页面爬取系统的数据,按照惯例原始数据队列使用redis来实现队列,原始数据队列是一个“阅后即焚”的队列,一旦该条数据被入库程序处理过了,就将该数据从队列中移除。入库程序使用python的django框架,对于数据库操作无与伦比的便利。数据库使用mysql。

内容管理系统,虽然看起来像是一个比较鸡肋的环节,但其实他的存在直接决定了整个项目的进展,因为这一步是与人工打交道的部分,通常来说,人工部分总是效率最低的部分。如果不能提供高效的工具,会直接拖慢系统进展。内容管理系统的开发使用什么建站语言(php/python/java等等)都可以,因为在这一步,数据库已经成型,所需要做的只是通用的数据读取部分。

时间: 2024-10-12 07:43:35

爬虫架构设计的相关文章

垂直型爬虫架构设计(2)

上文提到了关于爬虫的一些简单概念与爬虫真正要做的一些功能.简单的分析了一下垂直型爬虫与宽度(深度)遍历的一些特点.现在,我主要针对于垂直型爬虫的架构设计做一些简单的介绍. 1.垂直型爬虫的基本需求 目前企业级所需的基本上是垂直型爬虫.舆情分析,财经资讯资讯推荐等.基本山使用的都是垂直型爬虫来作为企业级使用的方案,企业级爬虫的特点我上篇博客里面已经讲过了,所以在做垂直型爬虫架构的时候只需要考虑抓去内容所需的功能.简单来说:拿到某篇资讯所需的方式或功能.例如:常见的 javascript方式,aja

垂直型爬虫架构设计

从事爬虫方向开发马上也将近两年时间了,今天基友问我关于爬虫的架构设计问题.其实这么久也想总结一下自己的整个开发的过程,架构的设计问题..对自己进行一些总结..仅作参考. 1.爬虫的分类 : 对于我来说,爬虫分为两类: 需要载入配置文件的爬虫与不需要载入配置文件的爬虫. 其实也就是人们常说的垂直型爬虫跟宽度(深度)遍历爬虫. 2.爬虫的架构: 1.宽度遍历爬虫. 做过SEO的朋友大概都知道,如果一个网站需要百度能够尽快的抓取,那么仅仅优化关键词,提高权重等都是比较简单的优化,爬虫友好性需要网站在建

分布式爬虫架构设计与实现

由于scrapy框架需要更多的学习成本,还有分布式爬虫也需要redis来实现,调度方式也不是很符合业务要求,于是就自己设计了个分布式爬虫架构.架构图如下: 爬虫的客户端为tornado编写的服务,爬虫管理器也是tornado编写的后台管理服务,主要功能:获取客户端的状态信息,爬虫进程数量,启动指定数量的爬虫进程,中断.重启爬虫,爬虫异常通知等. 爬虫进程与调度器间的请求非常频繁,所以使用socket长连,获取优先级高的队列,调度器的优先级算法,根据业务需求来编写. 消息队列使用rabbitmq,

如何做最好的定向爬虫架构

如何做最好的定向爬虫架构 姓名:郭钟 当前职位:某创业公司担任爬虫工程师 摘要 随着互联网信息的不断发展,信息数据的挖掘技术也不断的发展.网络爬虫技术也随之得到了巨大的发展.而对于内容型驱动的网站来说反扒是一件必不可少的事情.很多网站用Jquery加壳.登录验证.限制单位IP每秒请求次数来阻止爬虫窃取数据.所以爬虫的智能性也受到越来大的挑战.特别是国内高匿代理IP资源少的问题给爬虫的技术发展代理巨大挑战.本论文由浅入深剖析一个定向爬虫最为重要的几点,由此得出一个适应现国内爬虫架构的解决方案. 引

架构设计:前后端分离之Web前端架构设计

在前面的文章里我谈到了前后端分离的一些看法,这个看法是从宏观的角度来思考的,没有具体的落地实现,今天我将延续上篇文章的主题,从纯前端的架构设计角度谈谈前后端分离的一种具体实现方案,该方案和我原来设想有了很大的变化,但是核心思想没变,就是控制层是属于Web前端的. 在以前文章里我说道前后端分离的核心在于把mvc的控制层归为前端的一部分,原方案的构想在实际的生产开发里很难做到,我觉得核心还是控制层和视图层的技术异构性,这样后果使得系统改造牵涉面太大,导致在项目团队里,沟通.协调以及管理成本相对较高,

分布式发布订阅消息系统 Kafka 架构设计[转]

分布式发布订阅消息系统 Kafka 架构设计 转自:http://www.oschina.net/translate/kafka-design 我们为什么要搭建该系统 Kafka是一个消息系统,原本开发自LinkedIn,用作LinkedIn的活动流(activity stream)和运营数据处理管道(pipeline)的基础.现在它已为多家不同类型的公司 作为多种类型的数据管道(data pipeline)和消息系统使用. 活动流数据是所有站点在对其网站使用情况做报表时要用到的数据中最常规的部

个人网站架构设计(三) - 从设计到前端到后台

在五月份,写过两篇博客,提到了要给自己做个网站,当时人在实习,没太多的时间,只是把大概的思路捋了一番,顺道也买了个云主机(配置比较低,内存才500M).接着返校处理毕业事宜,于是六月也随着同学之间挥泪告别的声音渐渐远去.七月,家里呆着,中旬回公司.想必这也是我近几年最长的一次假期了=. = 一.先说设计 1. 阮一峰的博客 目前我的博客设计是 fork 了 BeiYuu 的主题,然后七改八改,除了主页 BeiYuu 还认得出是他的之外,其他页面已经动了很大的手术,而这些手术灵感都是源自阮一峰阮大

一个小型的网页抓取系统的架构设计

一个小型的网页抓取系统的架构设计 网页抓取服务是互联网中的常用服务,在搜索引擎中spider(网页抓取爬虫)是必需的核心服务.搜索引擎的衡量指标"多.快.准.新"四个指标中,多.快.新都是对spider的要求.搜索引擎公司比如google.baidu都维护者自己负责的spider系统.当然他们的系统很复杂,在这里我们介绍一个小型的网页抓取系统的架构,目标是快速的抓取某个或者几个指定的网站的数据,它的作用有很多,比如做竞品分析,还有其他不可告人的J. 下面这个小型的网页抓取系统,分成下面

Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析

Java生鲜电商平台-电商中海量搜索ElasticSearch架构设计实战与源码解析 生鲜电商搜索引擎的特点 众所周知,标准的搜索引擎主要分成三个大的部分,第一步是爬虫系统,第二步是数据分析,第三步才是检索结果.首先,电商的搜索引擎并没有爬虫系统,因为所有的数据都是结构化的,一般都是微软的数据库或者 Oracle 的数据库,所以不用像百度一样用「爬虫」去不断去别的网站找内容,当然,电商其实也有自己的「爬虫」系统,一般都是抓取友商的价格,再对自己进行调整. 第二点,就是电商搜索引擎的过滤功能其实比