`

快速构建实时抓取集群

阅读更多

定义:
首先,我们定义一下定向抓取,定向抓取是一种特定的抓取需求,目标站点是已知的,站点的页面是已知的。本文的介绍里面,主要是侧重于如何快速构建一个实时的抓取系统,并不包含通用意义上的比如链接分析,站点发现等等特性。

在本文提到的实例系统里面,主要用到linux+mysql+redis+django+scrapy+webkit,其中scrapy+webkit作为抓取端,redis作为链接库存储,mysql作为网页信息存储,django作为爬虫管理界面,快速实现分布式抓取系统的原型。

名词解析:
1.  抓取环:抓取环指的是spider在存储中获取url,从互联网上下载网页,然后将网页存储到数据库里面,最后在从存储里面获取下一个URL的一个流程。
2.  Linkbase:链接库的存储模块,包含一般的链接信息;是抓取系统的核心,使用redis存储。
3.  XPATH:一门在 XML 文档中查找信息的语言,XPath 可用来在 XML 文档中对元素和属性进行遍历, 是 W3C XSLT 标准的主要元素。使用XPATH以及相关工具lib进行链接抽取和信息抽取。
4.  XPathOnClick:一个chrome的插件,支持点击页面元素,获取XPATH路径,用于编辑配置模板。
5.  Redis:一个开源的KV的内存数据库,具备很好的数据结构的特征和很高的存取性能。用于存储linkbase信息
6.  Django:爬虫管理工具,用于模板配置,系统监控反馈。Django在这里主要是用来管理一个数据库,使用Admin功能。
7.   Pagebase:页面库,主要是存储网页抓取的结果,以及页面抽取的结果,和dump交互,使用mysql实现。
8.    Scrapy:一个开源的机遇twisted框架的python的单机爬虫,该爬虫实际上包含大多数网页抓取的工具包,用于爬虫下载端以及抽取端。
9.     列表页:指的商品页面之外的所有页面
10.    详情页:比如商品B2C的抓取中,特指商品页面,比如:http://item.tmall.com/item.htm?id=10321272374

系统架构
一:存储 redis+mysql
链接库(linkbase)是抓取系统的核心,基于性能和效率的考虑,本文采用基于内存的redis和磁盘的mysql为主,对于linkbase主要是存储抓取必须的链接信息,比如url,anchor,等等;对于mysql,则是存放抓取的网页,便于后续的抽取和处理。
a)      PageBase:使用Mysql分库分表,存放网页,如下图:

b)     Linkbase     使用Redis集群,存储linkbase信息。
几个基本的数据结构:
1:抓取队列 (candidate list)
分为待抓取的url队列和更新的url队列;队列存放urlhash,使用redis的list数据结构,对于新提取的url,push到对应的列表里面,对于spider抓取模块,从list pop得到。对于一个站点而言,抓取队列有两种类型:列表页抓取队列和详情页抓取队列。
2:链接库 (linkbase)
链接库实际上是存储链接信息的DB;Key是urlhash,Value是linkinfo,包含url,purl,anchor,xpath。。。;在redis使用hash存储,直接存放在redis的里面。KV链接库,不区分页面类型。
3:已抓取集合(crawled_set)
已抓取集合指的是当前已经下载的页面的urlhash,存放已经抓取的网页,使用redis的set实现,set的key是urlhash,score是时间戳,已抓取集合主要是用来记录哪一些页面已经抓取和抓取的时间,用于后续的更新页面调度以及抓取信息的统计。同抓取队列一样,每一个站点有两种类型的已抓取集合,详情页和列表页

二:调度模块:
调度模块是抓取系统的关键,调度系统的好坏决定了抓取系统的效率;这块是主要是在redis linkbase之上的数据结构,主要有抓取队列、抓取集合、抓取优先级等等数据结构组成;对于一个抓取循环来说:获取URL,提交到抓取模块的待抓取队列,启动抓取,抓取完成之后对新链接进行抽取,最后进入等待抓取的队列里面。
调度系统的基本配置:
a)     频率(间隔多少秒)
b)     各个抓取列表的选取比例:get_detail,mod_detail,get_list,mod_list
链接抽取:抽取页面的链接,进行除重,对于新的链接,插入到待抓取列表里
内容抽取:按照模块的配置XPATH,抽取页面信息,并写入到pagebase中。
离线调度:按照更新的比例,从crawled_set里面,定期选取url进入Mod队列里面进行刷新。

三:抓取模块:
抓取模块是抓取的必要条件,抓取模块来说,重要的是应付互联网上各式的问题,以及如何实现对对方站点的ip平衡,当然,这块是和调度系统的紧密结合的,对于抓取模块而言,本文主要使用scrapy工具包里面的下载模块。
首先,抓取模块从linkbase获取对应站点的抓取url,进行页面下载,然后将页面信息写回到pipeline中,并完成链接抽取和页面抽取,同时调用调度模块,插入到linkbase和pagebase中。
下载端设计:
IP:每台机器需要配置多个物理公网IP,下载的时候,随机选择一个IP下载
抓取频度调整:读取配置文件,按照配置文件的抓取频率进行选取url

四:配置界面:
配置界面主要是对抓取系统的管理和配置,包括:站点feed、页面模块抽取、报表系统的反馈等等。

类似于通用的抓取架构,本文提到的抓取系统架构如下图:


一个完整的抓取数据流:
1:用户提供种子URL
2:种子URL进入linkbase中新URL队列中
3:调度模块选取url进入到抓取模块的待抓取队列中
4:抓取模块读取站点的配置文件,按照执行的频率进行抓取
5:抓取的结果返回到pipeline接口中,并完成连接的抽取
6:新发现的连接在linkbase里面进行dedup,并push到linkbase的新URL模块里面
7:调度模块选取url进入抓取模块的待抓取队列,goto 4
8:end

系统扩展
本文提到的抓取系统,核心是调度和存储模块;其中,抓取,存储,调度都是通过数据进行交互的,因此,模块之间可以任意平行扩展,对于系统规模来说,只需要平行扩展mysql和redis存储服务集群以及抓取集群即可。当然,简单的扩展会带来一些问题:比如垃圾列表页的泛滥,链接库的膨胀等等问题,这些问题后续在讨论吧。

声明:如有版权问题,请与原文作者联系。
<!--EndFragment-->
分享到:
评论

相关推荐

    Python-scrapyredis的集群版

    总之,“Python-scrapyredis的集群版”是一个强大的工具,可以帮助开发者构建可扩展、高效率、具备去重功能的网络爬虫集群,应对大规模网页抓取的挑战。通过深入理解和应用上述知识点,可以有效地管理和优化Scrapy-...

    招投标大数据抓取及分析系统探索-D.docx

    因此,构建一个招投标大数据抓取及分析系统显得尤为必要,这不仅可以为企业自身提供决策依据,还可以作为服务产品提供给其他企业,帮助他们了解政府行业投资,制定发展规划。 二、需求分析 系统的主要用户分为两类...

    SpringBoot分布式集群爬虫实战教程

    在本《SpringBoot分布式集群爬虫实战教程》中,我们将深入探讨如何利用SpringBoot框架构建一个高效的分布式爬虫系统。SpringBoot以其简洁的配置、快速的启动时间和丰富的生态系统,成为了现代Java开发的首选框架之一...

    strom分布式抓取

    分布式抓取是网络数据获取的一种高效方法,它利用多台计算机并行处理任务,从而能够快速、大规模地从互联网上抓取信息。Apache Storm作为一款强大的实时计算系统,被广泛应用于分布式抓取领域。本文将深入探讨Apache...

    victoriaMetrics集群版本的vmagent二进制包

    3. **数据转发**:收集到的数据可以被实时推送到VictoriaMetrics集群,确保数据的安全性和可用性。 4. **动态配置**:支持通过HTTP API动态更新抓取配置,便于快速响应环境变化。 5. **数据压缩**:vmagent在传输...

    基于hadoop和hbase的分布式索引集群研究.pdf

    通过对Hadoop和HBase的理解和运用,可以构建一个高效率的分布式索引集群,用以支持大数据环境下的搜索引擎需求。这种集群利用分布式计算和存储的优势,通过高效的分布式倒排索引算法处理索引任务,并将索引表存储在...

    WebMagic抓取数据以及ElasticSearch实现房源搜索(Java代码).zip

    WebMagic是Java编写的一款开源爬虫框架,它的设计目标是简化爬虫开发过程,让开发者能够快速地实现网页抓取。WebMagic主要由四个组件构成: 1. **PageFetcher**:负责发起HTTP请求,获取网页内容。 2. **Downloader...

    通过django创建搜网网站,通过elasticsearch实现动态搜索scrapy抓取的数据.zip

    在构建一个功能强大的网络搜索引擎时,常常需要整合不同的技术来实现高效、实时的搜索功能。本项目就是一个典型的实例,它利用Django框架构建了一个搜索网站,同时结合了Elasticsearch来处理Scrapy抓取的数据,实现...

    毕业设计后端 - 基于MongoDB分布式数据库集群的斗鱼弹幕采集系统设计.zip

    在本项目中,Go主要负责弹幕数据的实时抓取和处理。利用Go的goroutine和channel特性,可以轻松实现多线程并发,提高数据采集和处理的效率。此外,Go的net/http库提供了构建网络请求的便利,用于对接斗鱼的API接口,...

    一种基于Kademlia的全分布式爬虫集群方法.pdf

    关键词所涉及的分布式爬虫、弱计算终端、海量节点、结构化P2P以及Kademlia等概念,都是构建全分布式爬虫集群不可或缺的技术要素。这些要素为全分布式爬虫集群方法提供了技术理论基础,指明了研究和实现的方向。 在...

    Python-ScrapydWebPython爬虫框架Scrapyd集群管理的全功能webUI

    ScrapydWeb是一个基于Python构建的爬虫框架Scrapy的扩展工具,专为Scrapyd集群提供了一个全功能的Web用户界面。这个工具旨在优化Scrapyd的管理和监控,使得爬虫项目部署、调度和监控变得更加便捷。Scrapyd本身是一个...

    Postgresql数据库集群在主题网络爬虫的应用.pdf

    因此,本文提出了一种基于PostgreSQL数据库集群的解决方案,旨在构建一个高性能的主题爬虫数据处理平台。 #### 主题爬虫框架 一个典型的主题爬虫系统通常包括以下四个主要组件: 1. **控制器**:负责任务调度和...

    开发基于 Nutch 的集群式搜索引擎

    由于Nutch构建在Hadoop之上,所有的数据库操作(CrawlDB, LinkDB, SegmentsDB 和 IndexDB)都通过调用MapReduce函数来实现,这为Nutch提供了强大的扩展性和分布式处理能力。 #### 实际应用示例 为了更好地理解...

    实时垂直搜索网站建设方案.pptx

    实时垂直搜索网站建设方案是针对特定领域或行业的高效搜索引擎构建策略,旨在提供更加精确、快速的检索体验。在本文中,我们将深入探讨垂直搜索、实时搜索、监控系统以及为应对高访问量和保证高可用性所采取的技术...

    Apache与Tomcat集群,伪静态,负载均衡

    在IT行业中,构建高效、可扩展的Web服务是至关重要的,Apache和Tomcat的集群配置、伪静态处理以及负载均衡正是实现这一目标的关键技术。Apache作为广泛应用的HTTP服务器,能够处理静态内容,而Tomcat则作为Java应用...

    电信设备-基于Hadoop集群的大规模Web信息提取方法及系统.zip

    在Web信息提取(也称为网页抓取或网络爬虫)领域,Hadoop可以帮助我们高效地从互联网上抓取、处理和分析大量网页数据。 Web信息提取是获取和解析网络上非结构化信息的过程,其目标可能是监控市场趋势、社交媒体分析...

    机器学习分布式大数据分析模型构建方法.pdf

    在搭建过程中,配置集群环境是不可或缺的,包括网络配置、环境变量设置以及安全措施(如生成和配置SSH登录秘钥)。Hadoop作为一个流行的开源分布式计算平台,在业界广泛使用。搭建Hadoop平台通常需要配置Hadoop-env....

    案例正文_基于招聘网站的离线统计及实时分析系统1

    - 集群环境采用Docker容器化技术,构建1个主节点和3个从节点的Hadoop和Spark集群,确保各节点间的通信和数据流动。 - 配合Zookeeper进行集群管理,Kafka用于数据流处理,Flume收集日志,MongoDB和Redis存储非结构...

Global site tag (gtag.js) - Google Analytics