目录
本科生毕业论文(设计)中文摘要 I
本科生毕业论文(设计)英文摘要 II
目录 I
图目录 III
表目录 IV
第一章 引言 1
1.1 研究背景 1
1.1.1 SourceForge.net 1
1.1.2 需求复用 1
1.1.3 实验项目 1
1.1.4 爬虫简介 2
1.2 国内外研究现状 2
1.2.1 java爬虫框架 2
1.2.2 python爬虫框架 2
1.3 本文的主要研究内容 3
1.4 论文的主要工作和组织结构 3
第二章 分布式爬虫综述 4
2.1 分布式爬虫类型 4
2.1.1 应用于搜索引擎 4
2.2.2 基于主题的爬虫 4
2.2.3 用户个性化爬虫 4
2.2 MapReduce 5
2.3 分布式爬虫系统的架构 6
2.3.1 主从式 6
2.3.2 自治式 7
2.3.3 混合式 7
2.4 爬取策略 8
2.5 部署网络 8
第三章 技术基础 9
3.1 网络通信技术 9
3.1.1 RPC 9
3.1.2 WebService 9
3.1.3 RMI 10
3.1.4 JMS 11
3.1.5 activeMQ 14
3.2 队列 14
3.3 线程池 14
3.4 jsoup 16
第四章 需求分析和概要设计 17
4.1 功能需求分析 17
4.1.1 需求概述 17
4.1.2 用例图 18
4.1.3 用例描述 18
4.2 性能需求分析 20
4.2.1 可扩展性 20
4.2.2 可靠性 21
4.2.3 负载均衡 21
4.2.4 降低通信开销 21
4.3 概要设计 21
4.3.1 系统结构图 21
4.3.2 流程图 22
4.3.3 性能需求的设计 23
第五章 模块详细设计与实现 25
5.1 模块详细设计 25
5.2.1 CenterNode模块 25
5.2.2 TaskNode模块 27
5.2 模块实现 30
5.2.1 关键部分代码 30
5.2.2 运行截图 33
5.3 数据库设计 36
第六章 总结与展望 37
6.1 总结 37
6.2 展望 37
参考文献 38
致谢 39
在网络上可以找到一些开源的分布式爬虫框架,但是这些项目项目实现复杂,很多功能对于本项目来说是冗余的,所以我选择独立实现一个分布式爬虫系统。本文主要阐述了分布式爬虫系统不同维度下的分类、本项目采用的技术、需求分析、体系结构以及项目的背景与展望。该系统具有内部逻辑清晰、实现修改简单、使用过程友好等特点。
第四章 需求分析和概要设计
4.1 功能需求分析
4.1.1 需求概述
经过分析,我决定在不同的网页内分别爬取开源项目的不同数据,这些网页类别包括:目录页,详情页,用户需求页。先根据目录页得到所有项目最基本的信息:名字和url,以及项目所在的页码–得到页码主要是为了处理数据方便。将项目url作为种子url放入爬取队列,然后按照广度优先策略分三次迭代:本文转载自http://www.biyezuopin.vip/onews.asp?id=14616第一次迭代在项目详情页爬取项目的基本信息,如项目简介、特征、评分等等;第二次迭代在项目详情页爬取每个项目的推荐项目;第三次迭代在用户需求页爬取用户对于该项目提出的改进需求。
每一页要爬取的数据如下:
目录页(如https://sourceforge.net/directory/page=1):名字,所在页码,主页。
详情页(如https://sourceforge.net/projects/clonezilla):所属目录,简介,特征,评分,周下载量,项目主页(指的不是在sourceforge.net上的主页,而是项目自身的主页,比如有的项目在github上的地址),最后更新时间,注册时间,平台或系统,目标用户群,开发语言,三个推荐项目的名称和主页。
用户需求页(如https://sourceforge.net/p/clonezilla/feature-requests/70):需求精要,标签,优先级,创建时间,状态(已解决或未解决),内容。
执行过程为:主节点选择要爬取的页码作为信息发送到JMS服务器activeMQ上,任务节点从activeMQ中接收信息,根据页码在数据库查询要爬取的url,执行爬虫任务。任务执行完后,任务节点发送返回信息到activeMQ上,主节点接收到返回信息后分配新任务给该任务节点。

package code;//生产消息
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;import utility.Utility;public class JmsClient {private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;private static final String BROKEURL = Utility.activeIP;public void connect(String ip, int i) {//连接工厂ConnectionFactory connectionFactory;//连接Connection connection = null;//会话 接受或者发送消息的线程Session session;//消息的目的地Destination destination;//消息生产者MessageProducer messageProducer;//实例化连接工厂connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKEURL);try {//通过连接工厂获取连接connection = connectionFactory.createConnection();//启动连接connection.start();//创建sessionsession = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);//创建一个名称为HelloWorld的消息队列destination = session.createQueue(ip);//创建消息生产者messageProducer = session.createProducer(destination);//设置为不持久化messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);  //发送消息sendMessage(session, messageProducer, i);session.commit();} catch (Exception e) {e.printStackTrace();}finally{if(connection != null){try {connection.close();} catch (JMSException e) {e.printStackTrace();}}}}private void sendMessage(Session session, MessageProducer messageProducer, int i) throws Exception{//创建一条文本消息 TextMessage message = session.createTextMessage(i+"");System.out.println("发送消息:"+i);//通过消息生产者发出消息 messageProducer.send(message);}}




















分布式爬虫系统的设计与实现(SourceForge.net数据爬取)相关推荐

  1. Python爬虫系列之多多买菜小程序数据爬取

    Python爬虫系列之多多买菜小程序数据爬取 小程序爬虫接单.app爬虫接单.网页爬虫接单.接口定制.网站开发.小程序开发> 点击这里联系我们 < 微信请扫描下方二维码 代码仅供学习交流, ...

  2. Python爬虫系列之MeiTuan网页美食版块商家数据爬取

    Python爬虫系列之MeiTuan网页美食版块商家数据爬取 小程序爬虫接单.app爬虫接单.网页爬虫接单.接口定制.网站开发.小程序开发> 点击这里联系我们 < 微信请扫描下方二维码 代 ...

  3. python爬虫和数据分析的书籍_豆瓣书籍数据爬取与分析

    前言 17年底,买了清华大学出版社出版的<Hadoop权威指南>(第四版)学习,没想到这本书质量之差,超越我的想象,然后上网一看,也是骂声一片.从那个时候其就对出版社综合实力很感兴趣,想通 ...

  4. 《python程序设计实践》课程设计报告(胡润百富榜数据爬取及分析)

    1 需求分析 随着科学技术的不断发展,信息流通日益方便,信息数据不断膨胀,充斥在各行各业.由于数据非常庞大,所以即使在搜索引擎存在的情况下,搜索结果的准确率也不高,这使得在网上查找关键有效信息也变为一 ...

  5. Python爬虫入门教程 15-100 石家庄政民互动数据爬取

    写在前面 今天,咱抓取一个网站,这个网站呢,涉及的内容就是 网友留言和回复,特别简单,但是网站是gov的.网址为 http://www.sjz.gov.cn/col/1490066682000/ind ...

  6. 【python爬虫专项(19)】blibli弹幕数据爬取(以全站搜索蔡徐坤的视频为例)

    blibli任意搜索关键字,相关视频的弹幕数据采集 参考网址:B站蔡徐坤 爬虫逻辑:[分页url采集]-[视频页面url采集]-[视频页面数据采集 / cid信息 / 弹幕xml数据采集] 弹幕xml ...

  7. 【Python爬虫】5行代码破解验证码+网页数据爬取全步骤详细记录

    文章目录 前言 一.抓包分析 二.编写模块代码 1.引入库 2.获取验证码图片 3.识别验证码 4.爬取列表页 5.爬取详情页 6.完整代码 总结 1.TIPS 2.如需交流,可在代码头找到我,或者用 ...

  8. 爬虫实战(二)猫眼电影动态数据爬取

    前言 爬虫部分的知识算是告一段落了,又是几天过去了,感觉挺充实的.里面可能还有一些需要改进的地方,慢慢完善吧. 正文 接下来我们就说说上次遗留下来的问题,如何爬取动态数据.先告诉你一下爬取的数据中为什 ...

  9. 爬虫实战(一)猫眼电影基础数据爬取

    看完爬虫基础,是不是有点心动手痒了呢?那么接下来就让我们一起学习如何爬虫吧. 写在爬虫之前 选这个题目的初衷:本人是一个学生党,经济来源较少但平时又特别爱看电影,又没时间关注电影票价的变动,有了这个爬 ...

最新文章

  1. 深入分析Parquet列式存储格式
  2. python sklearn.learning_curve 什么是学习曲线?
  3. 制作.sens数据集跑通bundlefusion
  4. 细数Android开发者的艰辛历程,已拿offer附真题解析
  5. 华硕 RT-AC54U路由器固件功能说明
  6. USACO-Section1.6 Prime Palindromes(素数和回文数)
  7. paip.图形化编程厉器.net vs2010 工作流WF4 hello word
  8. 2021-09-13 QCC3003 回连
  9. Tomcat中的ResourceBundle国际化解析
  10. extjs6整合到web项目中
  11. 博客网站怎么做,怎样建立一个自己的网站
  12. 【干货分享】硬件测试工程师必备基本技能,看这一篇就够!
  13. 如何将多个excel表格合并成一个_怎样在线就能将多个PDF文档合并成一个?
  14. 【bat批处理脚本命令】2分钟看懂,一键主机windows系统远程连接控制阿里云等windows系统的云服务器(保姆级图文+实现代码)
  15. 被世界吉尼斯总部评为世界上最大的瀑布群
  16. mathcad入门一
  17. Ktor 2.0?半香不香的尴尬
  18. Java添加水印(图片水印,文字水印)
  19. XML fragments parsed from previous mappers does not contain values
  20. C#语言和SQL Server 数据库技术_用表组织数据

热门文章

  1. C++中的友元——编程界的老王
  2. Radon变换(Matlb)
  3. 【操作系统】简易文件系统设计
  4. VMware 14 Pro 永久许可证激活密钥
  5. 目标函数(object function),损失函数(loss function)以及代价函数(cost function)之间的关系与区别
  6. Arduino UNO驱动MCP9808高精度数字温度传感器
  7. 开发者在国内如何白嫖AWS服务器一年时间,怎样通过SSH工具连接AWS?免费的服务器有什么样的限制?
  8. 高速ad指标分析 matlab,高速ADC的动态性能参数和基于DSP技术的测试方法研究
  9. Ubuntu8.04最全问题汇总
  10. FreeMarker教程---Freemarker操作字符串