基于scrapy的特定主题爬取与展示系统的设计与实现开题报告
2020-06-02 19:50:42
1. 研究目的与意义(文献综述包含参考文献)
一、 本课题研究与开发的背景与目的及意义
1.1 本课题研究开发的背景
随着Intemet的飞速发展,互联网的信息大爆炸给人们带来信息过载的问题,各种资讯的发布方式已经从传统媒体逐渐的转移到互联网上。人们通过互联网交流兴趣爱好、分享读书感受等交流的需求在急剧的增加,豆瓣网(https://www.douban.com/)、百度读书(http://yuedu.baidu.com/)、亚马逊(https://www.amazon.cn/)等网站已经成为人们交流兴趣爱好的重要地方。在此背景下,确定了在研究Scrapy等主流爬虫框架的基础之上开发一个特定主题爬取与展示系统,通过定制化的爬虫实时抓取来快速的聚合互联网上各个站点的特定主题内容并对其加以处理,以使得人们更加高效、全面的获取感兴趣的资讯。
目前,爬虫的需求呈爆炸式增长的趋势,这是当前各种互联网创新和大数据时代的新常态。火车头和八爪鱼等团队看到了这一点,并率先开发了相对完备的爬虫产品,很多用户都在使用,但是更多的用户希望直接把爬虫抓取任务外包出去,因为他们不懂技术,工具的使用需要逾越技术的鸿沟,大部分用户并没有这个逾越鸿沟的打算。大数据时代,对大数据的分析应当成为一个行业,数据拥有者应该开放数据的分析接口,让数据的价值释放,而爬虫开发者,很多时候是数据分析者(最起码是个数据清洗和筛选者)。他们蒙上了一层神秘面纱,带着一丝黑客气息,法律应当给他们更大的生存空间,让这个有价值的行业创造更大的价值。
1.2 本课题研究开发的目的
本课题的主要目的是设计面向主题的网络爬虫程序与展示系统,要考虑到网络爬虫的各种需求、网络爬虫主体网站的特性、对URL进行构造。网络爬虫使用scrapy实现多线程,让爬虫具备更强大的抓取能力和灵活性。网络爬虫要实现对特定主题的爬取。网络爬虫还要完成信息提取任务,对于抓取回来的网页提取出图书、音乐、电影相关信息等。对网络爬虫的网络设置连接及读取时间,避免无限制的等待。通过云标签、图表等对处理后的数据进行可视化展示。研究网络爬虫的原理并实现爬虫的相关功能以及数据的展示。
1.3 本课题研究开发的意义
互联网是一个庞大的非结构化的数据库,将数据有效地检索并组织呈现出来有着巨大的应用前景。人们面临的问题从原来的信息不足到现在的信息过度。搜索引擎作为一个辅助人们检索信息的工具,虽然Google、百度等搜索引擎满足了人们部分的需求,而直接使用搜索有很多无关内容出现,关联度不够,这些通用性搜索引擎也存在着一定的局限性,对于某些方面的需求仍然显得不足。不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果包含大量用户不关心的网页,如某些用户为了了解某本数据的信息,可能需要前往豆瓣读书、亚马逊书城、百度读书等很多网站切换浏览这样十分繁琐且会出现许多用户不需要的信息。为了解决这个问题,所以拟开发一个特定主题爬取与展示系统。在信息相关度、分析与界面显示方面做到提升。
二、系统要实现的功能
该特定主题爬取与展示系统使用Python语言开发,包括前台和后台两大部分:后台包括爬虫及页面处理程序,前台包括网页展示等功能。
爬虫及其处理程序具有的功能如下:
(1)抓取网页上的特定主题(如图书、音乐、电影等)及其相关的信息(如评分、书的作者、音乐创作者、电影导演等)。
(2)抓取网页上特定主题(如图书、音乐、电影等)的所有链接。
(3)对爬取的信息进行数据处理,包括解析HTML格式化数据,数据持久化等。
网页展示具有的功能如下:
(1)查询到特定主题(如图书、音乐、电影等)及其相关的信息(如评分、书的作者、音乐创作者、电影导演等)。
(2)搜索某个特定主题(如图书、音乐、电影等)。
(3)对相关内容进行图形化显示,采用数据可视化技术包括云标签,图表等。
三、 系统实现工具和技术
3.1 PyCharm开发工具
PyCharm是由JetBrains打造的一款Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。同时支持Gooddle App Engine,PyCharm支持IronPython。这些功能在先进代码分析程序的支持下,使PyCharm成为Python专业开发人员和刚起步人员使用的有力工具。
3.2 数据库MySQL
MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle公司。MySQL是当今最流行的关系型数据库管理系统之一,在WEB应用方面MySQL也是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。
3.3 Python语言
Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。
Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C )很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C 重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。
3.4 B/S的系统设计模式
B/S结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。B/S结构是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。浏览器通过Web Server同数据库进行数据交互。 这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。
优点包括:
(1)维护和升级方便。软件系统的改进和升级越来越频繁,B/S架构的产品明显体现着更为方便的特性。B/S架构的软件只需要管理服务器就行了,所有的客户端只是浏览器,根本不需要做任何的维护。
(2)开发成本低。软件的趋势是凡使用B/S架构的应用管理软件,只需安装在Linux服务器上即可,成本低廉且安全性高。客户端只需要安装浏览器即可使用,因此同时具有跨平台的特点。
(3)客户端负荷低。主要的数据的处理功能都在服务器端实现,客户端一般只做显示功能,所以大大降低了客户端的处理能力。
3.5 主流的爬虫框架
表1 流行爬虫框架对比表
爬虫 |
Nutch |
Heritrix |
Larbin |
开发语言 |
Java |
Java |
C |
爬取内容 |
只获取并保存可索引的内容,可以修剪内容,或者对内容格式进行转换 |
精确的站点内容的深度复制,包括图像以及其他非文本内容。不对页面进行修改。 |
获取单个、确定网站的所有联结,甚至可以镜像一个网站 |
管理界面 |
命令行运行、控制, 配置文件 |
管理界面 Web控制管理界面 |
通过telnet协议远程向爬虫添加新的url |
分布式处理 |
按照Hadoop的模式 来编写以获得分布 |
不支持 |
不支持 |
个性化设置 |
无法对每个站点的最大连接数,连接延时,URL过滤,代理服务器,抓取深度,抓取网页总数等参数作单独设置,只能用全局设置。 |
可设置下载的最大字节,最大数量的下载文档,和最大的下载时间。可设置工作线程数量。可设置所利用的带宽的上界。可在设置之后一定时间重新选择。包含一些可设置的过滤机制,表达方式,URI路径深度选择等 |
仅能进行简单的全局设置,如并行获取网页的数量、并行解析dns的数量、网页抓取深度、是否允许抓取域名外连接、对同一个服务器获取网页的间隔时间等 |
如上表1所示,Nutch的优点是分布式的处理,可扩展,与Lucene紧密结合,缺点是对中文支持不好。Heritrix有高度可扩展,性能优秀,功能齐全但是对中文支持不够,容错性差,对于重复爬取URL处理不好,恢复能力很差。Larbin使用C 语言编写性能好,稳定但是功能单一,没有删除功能,排重会误判,需要结合bloom过滤器(Bloom Filter))来使用。综合以上考虑本文最终采用python语言下的Scrapy框架来实现自己设计定义的特定主题的爬虫设计。
Scrapy是一套基于Twisted的异步处理的爬虫框架,是用纯python实现的,用户只需要定制几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片。Scrapy是一套非常成熟的快速的网页抓取框架,用来抓取网页,并从网页中提取结构化数据。它用途广泛,可以应用于从数据挖掘到监控和自动化测试等场景。目前已经有很多企业在生产环境中使用Scrapy。Scrapy设计理念简单,提供了各种网络爬虫所需要的特性。开发人员可以以较低的成本来使用这些功能;它的效率较高, 用它开发的爬虫在单台服务器上运行每天可以爬取500个站点;它的扩展性好, Scrapy在设计之初就把可扩展性列入重要的位置,它提供多种机制来定制个性化插件;Scrapy具备很好的可移植性,它可以运行在Linux、Windows、Mac OS 和BSD上;Scrapy的代码有良好的测试框架,代码测试的覆盖率很高。 Scrapy由引擎(Scrapy Engine)、调度器(Scheduler)、蜘蛛(Spiders)、数据处理流水线(Item Pipeline)和下载器(Downloader)五大部分组成,其中还包括各种中间件辅助这五大模块来实现更为精细的爬虫功能。
四、参考文献 [1] 林伟坚. 基于Scrapy框架的新闻实时抓取及处理系统的设计与实现[D].南开大学,2012. [2] 陈露. 基于主题的多线程网络爬虫系统的研究与实现[D]. 北京邮电大学, 2015.[3] 周毅. 基于目录型网页的课程资源爬取子系统的设计与实现[M].北京大学,2008[4] 黄秋艳. 基于主题的增量网页并行爬取问题研究[D]. 山东大学, 2013. [5] 姜琨. 主题搜索引擎中的爬取技术研究[D]. 国防科学技术大学, 2011. [6] Xie D X, Xia W F. Design and Implementation of the Topic-Focused Crawler Based on Scrapy[J]. Advanced Materials Research, 2013, 850-851:487-490.[7] Zhou Z H, Zhang H R, Xie J. Data crawler for Sina Weibo based on Python[J]. Computer application, 2014, 34(11):3131-3134. [8] RichardLawson. 用Python写网络爬虫[M]. 人民邮电出版社, 2016. [9] 马栋, 王荣, 邱烨,等. 基于Python的站内搜索引擎的设计研究[J]. 2009. [10] 米切尔, 陶俊杰, 陈小莉. Python网络数据采集[M]. 人民邮电出版社, 2016. [11] AndreLessa, Lessa, 张晓晖. 深入学习:Python程序开发[M]. 电子工业出版社, 2001. [12] 周伟, 宗杰. Python开发技术详解[M]. 机械工业出版社, 2009. [13] 胡亚楠. 社交网络数据获取技术与实现[D]. 哈尔滨工业大学, 2011. [14] 乔峰. 基于模板化网络爬虫技术的Web网页信息抽取[D]. 电子科技大学, 2012. [15] 孙涛, 李俊青, 王云强. 基于B/S结构企业级报表系统的设计与实现[J]. 福建电脑, 2006(1):148-149.
2. 研究的基本内容、问题解决措施及方案
本课题要研究或解决的问题:基于scrapy框架的特定主题爬取与展示系统。
本课题最终要实现一个特定主题的爬取和展示系统,系统能根据用户的需求(即相应的主题)从配置的网站列表中爬取与特定主题相关的内容,进行相应的处理后存入数据库系统中。设计并实现一个界面美观的展示系统,使用个性化的显示风格集中展示用户关心的主题内容。此外提供一定的报表分析与检索功能,使用户省去在不同网站间来回切换寻找相应内容的困扰的同时享受个性展示的需要。
该爬取与展示系统包含两部分的内容:前台展示界面、后台爬取和处理系统。