Giter Site home page Giter Site logo

zhangpeihao / distributed_crawler Goto Github PK

View Code? Open in Web Editor NEW

This project forked from kangyijie5473/distributed_crawler

0.0 2.0 0.0 2.84 MB

2017“**软件杯”分布式爬虫项目

License: MIT License

Mathematica 0.01% Java 25.48% Python 74.48% Shell 0.04%

distributed_crawler's Introduction

  "分布式爬虫"软件设计文档

赛题简介

爬虫系统,是对海量的分散的互联网数据进行采集的系统,是搜索引擎系统的基础。应大数据的需求,分布式爬虫系统是解决传统爬虫出现的无法对网页数据信息的归类和组织的问题。
分布式爬虫,对同一个网站的同类数据,进行结构化。同时,能利用分布式的软件设计方法,实现爬虫的高效采集。

软件需求分析

1.分布式爬虫 --- 通过分布式调度,提高整体效率,同时保证高可用性,具有一定的容错性、具有自动恢复,备份的功能。
2.自动结构化 --- 对于具有相同模板的URL集合,能够自动提取数据。对于包含正文的网页,能够提取正文。
3.监控系统 --- 图形化的用户界面,方便用户操作,并且对程序运行中的各项数据进行实时监控和展示。
4.反爬策略 --- 针对不同网站的反爬虫机制,制订爬虫策略。

开发环境

内存:4GB
CPU:
磁盘:
操作系统:Linux(Deepin 15.4)
编程语言:Python 2.7

总体设计思路

针对软件需求中的编程语言限制,结合我们自身的技术水平,我们采用了Python作为开发语言。同时,为了更好的贴近实际生产环境,我们的开发及测试均在Linux操作系统上完成。
对于Python 网络爬虫,目前效率和功能最完善的便是Scrapy这个爬虫框架,我们使用它作为基础框架,在其上进行有针对性的修改和优化。
在分布式调度上,我们由本次项目实际需求出发,同时也对主流的算法理论进行了学习,最终制订了"Leader-Worker-Observer"算法来进行分布式调度,保证效率和高可用性。
在需求中,对于数据存储并没有太多要求,所以我们准备了MySQL和MongoDB两套方案,主要对应了较为通用、需要高度事务性的需求和面向文档存储的需求。同时在缓存系统上,主要采用Redis,一方面Redis丰富的数据结构十分贴合我们的需求,另一方面Redis作为目前最火热的NoSQL,其性能经受考验,并且它的集群解决方案也较为成熟。

Scrapy整体架构

scrapy

1.引擎(Scrapy Engine),用来处理整个系统的数据流处理,触发事务。
2.调度器(Scheduler),用来接受引擎发过来的请求,压入队列中,并在引擎再次请求的时候返回。
3.下载器(Downloader),用于下载网页内容,并将网页内容返回给蜘蛛。
4.蜘蛛(Spiders),蜘蛛是主要干活的,用它来制订特定域名或网页的解析规则。编写用于分析response并提取item(即获取到的item)或额外跟进的URL的类。 每个spider负责处理一个特定(或一些)网站。
5.项目管道(Item Pipeline),负责处理有蜘蛛从网页中抽取的项目,他的主要任务是清晰、验证和存储数据。当页面被蜘蛛解析后,将被发送到项目管道,并经过几个特定的次序处理数据。
6.下载器中间件(Downloader Middlewares),位于Scrapy引擎和下载器之间的钩子框架,主要是处理Scrapy引擎与下载器之间的请求及响应。
7.蜘蛛中间件(Spider Middlewares),介于Scrapy引擎和蜘蛛之间的钩子框架,主要工作是处理蜘蛛的响应输入和请求输出。
8.调度中间件(Scheduler Middlewares),介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。

团队分工及项目进度

团队分工

负责人:何攀
职责:
1.进行项目总体设计,制订项目计划。
2.协调成员间工作,保证项目进度。
3.指导处理项目中出现的问题。 4.进行模块测试。

组员1: 康艺杰
职责:
1.项目设计文档的编写。
2.负责持久化层开发。

组员2: 宫展京
职责:
1.负责用户界面层开发。
2.负责业务逻辑层开发。

项目进度

时间 进度
2017-4-15 ~ 4-21 需求分析,确定使用的技术及开发环境。
2017-4-22 ~ 4-30 查阅理论文献,对技术上的缺失点进行补充。
2017-5-1 ~ 5-10 整体思路规划,对项目进行整体设计。完成人员分工。
2017-5-11 ~ 5-31 实现各个模块,同时进行模块测试,基本实现对应功能。
2017-6-1 ~ 6-7 模块整合,继续测试,对暴露出的问题进行修正。
2017-6-8 ~ 6-10 利用测试数据集,进行不同环境下的测试。
2017-6-11 ~ 6-17 针对测试结果,继续修改项目,同时优化性能。
2017-6-18 ~ 6-22 拍摄展示视频,调整代码格式。
2017-6-22 ~ 6-29 总结项目,编写项目文档。
2017-6-30 提交作品。

分布式调度算法设计

1.需求分析
在本项目中主要分为两大类内容的爬取,爬取流程如下:

(1)电商类
获得入口 --› 爬取分类页 --› 爬取商品详情
(2)博客/新闻类
获得入口 --› 爬取分类/博主列表 --› 爬取每篇新闻/博客

可以看出,这两类内容的爬虫都是先抓取大量URL,以深度优先搜索找到要爬取的内容。

2.调度模型
本项目中,一共分为三类模型。

(1)Leader
负责从入口直到分类页的爬取,将URL抽取,以任务的形式,存放到任务队列中,供Worker获取。

(2)Worker
负责从任务队列中获取任务,爬取商品详情/博客正文/新闻正文。

(3)Observer
负责监控整个系统运行情况,调度爬虫节点。

3.调度流程

(1)Leader获得入口,根据网页类型获取分类页,按照深度优先,直到找到最后一级目录,将商品详情/博客/新闻的URL作为任务插入到任务队列中。
(2)Worker从任务队列中获取任务,爬取正文,完成内容抽取后存入数据库。
(3)Observer负责监控整个系统运行情况,一开始由于任务队列中没有任务,命令全部的Worker都转换为Leader,负责爬取URL。 随着程序的运行,任务队列中的任务逐渐增多,将Leader转换为Worker进行任务处理,保证程序爬取的效率。同时,还将监控各个节点,如果某节点失效,将动态调整Worker和Leader的数量,同时及时通知,让节点重启。在爬取过程中,Observer还监控整个程序任务进度。

4.架构图

架构图

监控系统设计

反爬策略

(1) 禁止使用Cookie,让网站无法识别我们的会话信息。
(2) 使用IP池,通过多个代理服务器的IP进行爬取。
(3) 使用用户代理,通过多个User-Agent进行爬取。

测试环境

内存:GB
CPU:
磁盘:
操作系统:Linux(Deepin 15.4)

测试结果

项目数据集测试结果

6月 官方发布了测试数据集,我们将正文提取之后的结果通过官方评分jar包进行了测试。
结果如下:

start judge result

distributed_crawler's People

Contributors

kangyijie5473 avatar

Watchers

 avatar James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.