基于JMS的分布式爬虫系统的设计与实现

摘要

随着互联网技术的飞速发展,网络信息以指数型趋势高速增长。对于一个要对数据进行统计分析的系统而言,搜集数据的过程是冗长枯燥的。基于这一现实,分布式爬虫系统获得了发展的契机。系统通过多台服务器的协调运行,成倍地提高了爬虫的效率。当然,分布式系统在获得效率提升的同时也大大增加了系统的复杂程度,开发人员需要考虑多方面因素以确保系统的正常运转。

本文对分布式爬虫系统的架构做了深入的讨论,给出了选择该架构的原因。项目使用了JMS消息队列技术在节点之间异步传递消息,起到应用解耦的效果。使用apache出品的activeMQ作为JMS服务器,能够跨语言跨平台传递消息,而且具有延迟接受的特性,一定程度上降低了网络延迟对系统性能的阻碍。中心节点的任务分配采用线程池技术,缓解了由于任务积累产生的效率瓶颈。

本文先介绍了项目研究背景,然后介绍了分布式爬虫相关知识和本项目所用技术,最后展示了项目的需求分析和体系结构。最终实现的分布式爬虫系统能够做到中心节点分配爬虫任务,任务节点执行爬虫程序并存储数据。同时系统针对一些分布式系统常用的性能需求做了设计,提高了系统的可扩展性和可靠性。

关键词:分布式系统,爬虫,JMS

ABSTRACT

With the rapidly development of Internettechnology, network information has grown at an exponential rate. For a system thatrequires statistical analysis of data, the process of collecting data istedious. Based on this reality, the distributed crawler system has gained anopportunity for development. The system multiplies the efficiency of crawler bycoordinating within several servers. However, the distributed system increasesthe complexity of the system while gaining efficiency. Developers need toconsider various factors to ensure the normal operation of the system.

This article makes an in-depth discussion of thearchitecture of the distributed crawler system and gives the reasons forchoosing certain architecture. The project uses JMS technology to delivermessages asynchronously between nodes, which has the effect of applyingdecoupling. The project also uses activeMQ from apache as the JMS server, whichhas the feature of cross-language and cross-platform messages delivery. Inaddition, activeMQ has the characteristics of delay acceptance. To some extent,it reduces the network delay on the performance of the system. The taskallocation of the central node adopts the thread pool technology, whichrelieves the efficiency bottleneck caused by task accumulation.

In this article, first I introduced the projectresearch background. Then I introduced the distributed crawler knowledge and technologyused in this project. Finally I demonstrated the project’s requirement analysisand architecture. The distributed crawler system this article implemented candistribute tasks by central node, and execute crawler programs and store databy task nodes. At the same time, the system is designed for the commonperformance requirements of distributed systems, which improves the system’sscalability and reliability.

KEY WORDS: distributedsystem, crawler, JMS

第一章 引言

1.1 研究背景

1.1.1 SourceForge.net

SourceForge.net是一个开源软件平台,用户不仅可以在网站上搜索到很多实用的软件,还能够给软件评分,向软件的开发者提需求建议等等。这些项目都有各自的适用领域、特征以及优缺点,用户可以通过搜索关键词,查看分类目录或者根据网站的推荐来找到自己的目标软件。

1.1.2 需求复用

对于一款产品,明确其需求是最关键的一步,可是客户的需求往往空乏而且充满不确定性,这给需求分析带来的巨大的挑战。不仅如此,客户与开发人员之间的沟通也存在隔阂。对于一项新的需求,开发人员需要从头开始调研、分析、建模,这会耗费很多精力。如果能够复用其他类似项目的需求,以他们开发人员的需求分析作为参考,就能在减少需求分析所需时间的同时还提高精确度。

常见的需求复用的原型有以下三种[1]:

旧的经验,没有任何文字记录,采用口耳相传的方法。

已有的需求规格书,重用已经有的文档和规格。

领域模型。

1.1.3 实验项目

本合作实验就是在对SourceForge.net做需求复用的基础上展开的,现阶段有两个目标:

根据网站上开源项目的描述、特征、所在目录和用户需求对项目精准定位。

采用领域工程的方法,对各个类别下的开源软件进行领域分析,建立特征模型。最终实现让软件开发人员直接根据需求和特征模型就能找到合适的开源软件进行需求复用。

我个人的项目是这个实验整体的第一步:获取数据。

1.1.4 爬虫简介

在如今信息爆炸的时代,获取有用信息对于互联网的使用者来说成为了越来越复杂的一件事。它们分布在不同的网页中,那么从这些网页上爬取信息就成为了一个重要的议题。网络爬虫是一项从网页中获取信息的技术。早期的爬虫程序运行在单台计算机上,爬虫程序设置url队列,先将要爬取的url加入队列,然后从队列中依次取出url,爬取相应网站的内容[2]。但是随着信息量的剧增和需要分析的数据的范围持续扩大,在单一计算机上运行的爬虫程序已经无法满足客户的需要,这时将爬虫程序与分布式系统结合以处理大量数据的思路就应运而生。

分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。它的目标是利用软件使多台普通的机器链接在一起,协同解决大量数据的处理和检索问题[2]。其思想是是把需要大量计算的,单个计算机无法完成的任务分配给若干个较小的模块,让多台计算机分别处理,统一储存运算结果以便接下来分析数据。分布式系统关注系统的可扩展性、可用性、可靠性、负载均衡、一致性等。

对于分布式爬虫,简单来说就是让每台服务器各自爬取一部分数据,最后将结果汇总起来。它关注任务的分配和调度,要求在提高整个系统爬虫效率的同时保证系统的可扩展性、可靠性和负载均衡。当然,由于可以使用不同的分布式架构,不同的分布式爬虫系统之间也千差万别。

1.2 国内外研究现状

1.2.1 java爬虫框架

Nutch:专为搜索引擎设计,以ApacheHadoop数据结构为基础。它提供了可扩展的功能接口,使得其对各种网页内容的解析,各种数据的采集、查询、集群、过滤等功能能够方便的进行扩展[3]。

Heritrix:可配置参数多,可定制性强,但是使用起来比较复杂。

1.2.2 python爬虫框架

scrapy:使用python开发的最流行的爬虫框架,使用布隆过滤器对url去重,底层使用异步框架twisted,支持高并发,很好地契合了搜索引擎的要求。

pyspider:与scrapy相比较轻量级,能够基于web查看运行状态,支持抓取javascript的页面。

1.3 本文的主要研究内容

在网络上可以找到一些开源的分布式爬虫框架,但是这些项目项目实现复杂,很多功能对于本项目来说是冗余的,所以我选择独立实现一个分布式爬虫系统。本文主要阐述了分布式爬虫系统不同维度下的分类、本项目采用的技术、需求分析、体系结构以及项目的背景与展望。该系统具有内部逻辑清晰、实现修改简单、使用过程友好等特点。

1.4 论文的主要工作和组织结构

论文主要分为六个章节,分别为:引言、分布式爬虫综述、技术基础、需求分析与概要设计、模块详细设计与实现、总结与展望。

第一章:引言。介绍项目的背景和研究内容。

第二章:分布式爬虫综述。介绍分布式爬虫系统的不同架构。

第三章:技术基础。介绍本项目所涉及的各项技术原理。

第四章:需求分析与概要设计。介绍项目的功能需求和性能需求,描述系统的结构、运行流程以及针对性能需求做出的设计。

第五章:模块详细设计与实现。介绍系统主要模块的类结构,展示关键代码和系统运行截图。

第六章:总结与展望。对项目进行总结,以及对项目未来的设想与展望。

18423381-669e6b7e460331d1.png

源码下载地址:https://www.write-bug.com/article/1821.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,简单介绍下网络爬虫   网络爬虫是通过网页的链接地址来寻找网页,从网站某一个页面(设置为主页)开始,读取网页的内容,找到网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到这个网站所有的网页都抓取完为止。实际上,由于抓取技术的限制以及存储技术、处理技术的限制,要完全抓取网站的所有网页是不可能的,也是不实际的!本着从用户需要为出发点,实际需要抓取的网页往往是有限的,只需抓取符合用户要求的网页即可! 抓取网页的策略 在抓取网页的时候,网络爬虫一般有两种策略(即两种搜索方法),广度优先和深度优先。 广度优先:是指网络爬虫会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此页面中链接的所有页面。这是最常用的方式,广度优先的搜索策略可以并行处理,提高抓取速度。 深度优先:是指网络爬虫会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接。这种策略较易实现,但是抓取速度慢。 由于一般不可能抓取网站的所有链接,一般会设置访问层数,即搜索深度。起始页的深度为0,起始页中的链接url深度为1,依此类推。 构造C#语言的爬虫程序 C#已经封装了HTTP访问和多线程,这对编写网络爬虫提供了方便,而要C#网络爬虫程序需要解决以下问题: HTML分析:需要某种HTML解析器来分析爬虫程序遇到的每一个页面。 页面处理:需要处理每一个下载得到的页面。下载得到的内容需要保存起来,以便进一步分析处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值