毕业论文(设计)开题报告暨提纲
学号: 姓名: 专业:
指导教师:
论文题目:基于Web的爬虫系统设计与实现
一、选题的目的和意义
互联网是一个超级庞大的数据库,有着无数的网页,包含着海量的信息,无孔不入、森罗万象。但很多时候,无论出于数据分析或产品需求,我们需要从某些网站,提取出我们感兴趣、有价值的内容,但是纵然是进化到21世纪的人类,依然只有两只手,一双眼睛,不可能一个网页、一个网页地去点去看,所以将数据有效地检索并组织呈现出来有着巨大的应用前景。
爬虫作为搜索引擎的重要组成部分,而搜索引擎作为一个辅助人们检索信息的工具,成为了用户访问万维网的入口和指南。但是,这些通用性的搜索引擎也存在着一定的局限性。不同领域、不同背景的用户往往具有不同的检索目的和需求,通过搜索引擎返回的结果包含大量用户不关心的网页。为了解决这个问题,一个灵活的爬虫有着无可替代的重要意义。
二、该题目国内外的相关研究动态
1.爬虫技术概述
爬虫是指一段自动的向互联网上某些网页发出请求并接收响应,根据一定规则继续爬取链接或从响应中提取出有价值的信息的一段程序,即爬虫是一段完成特定功能的程序。从原理上讲,任何具有网络通信功能的高级程序设计语言均可设计实现爬虫程序。爬虫与浏览器访问网页,究其原理,都是通过网络协议去请求互联网中的某个特定数据(不一定特指网页数据,音频、图片等数据也是爬取的对象)。不同点在于,其一,爬虫一般只需要运行编写好的爬虫程序即可完成网页请求;其二,浏览器一般是运行在客户端且由用户操作的,而爬虫是模拟用户操作浏览器。
自上世纪90年代起,爬虫技术就得到了不少计算机工作者的重视,随着技术的发展,爬虫技术已经逐步趋于成熟,并在很多领域发挥巨大作用[7]。
一个传统的爬虫往往是从一批URL开始的,爬虫先请求这批URL的网页内容,得到正确的应答后,对页面内容进行解析,然后根据预先设计好的规则从网页中找到某些URL加入到请求队列中,或者从网页中定位到所需要的信息,并将信息进行封装保存。循环往复,不断从请求队列中提取URL进行请求,直至请求队列为空或某些其他情况导致爬虫程序终止为止。
图1-1 爬虫工作流程
Python语言编写的爬虫是具有巨大优势的。首先,Python有Scrapy等一些其他的成熟爬虫框架,其中已经考虑到了Cookie,并行爬取等众多令人头疼的问题,让程序员大可不必“造轮子”,而是直接可以站在巨人的肩膀上。其次,即便不使用框架,Python依然提供了众多成熟的第三方库如Request、Beautiful解析库等等,其中也集成了部分反爬取的高级功能,开发起来又快又好。虽然以上功能很多语言都可以完成,但均没有使用Python来的简洁舒适,正如python的设计标语“Life is short, you need python”。最后,Python对爬取到的数据进行处理十分方便。总之,各种优点造就了现在Python在爬虫编写领域的地位,其已经是现在编写爬虫使用最广泛的语言。
目前,国外设计出了很多的网络爬虫系统,主要由Ubi Crawler,Mercator,Nutch和GoogIeCrawler率和准确率。这些网络爬虫系统都具有自己独特的一面,在数据采集方面都有着很高的效下面,将对以上几种网络爬虫系统做简单的介绍。
谷歌的搜索引擎网络爬虫使用的是分布式的网络爬虫系统,采用多台服务器并行访问网页,抓取数据,系统由多台并行的爬虫主机和一台中央主机组成。中央主机首先访问请求的Url,然后将请求得到的网页分发给下面并行的主机,来对网页数据进行定位和抓取。各个爬虫主机在完成网页数据的抓取之后,将抓取到的数据做成定义的规格,发送给索引进程使用。索引进程负责管理存储在数据库的网页Url和己经抓取到的网页数据,Url解释器进程负责解析网页Url。解释器进程是将刚刚抓取到的网页Url保存到本地,并且发送给中央主机,由中央主机读取。谷歌搜索引擎中的网络爬虫系统采用这种循环的方式,将中央主机和多台爬虫主机配合使用,不断的从互联网抓取需求的数据。
2.爬虫设计者所面临问题和反爬虫技术的现状
在互联网时代,爬虫是一个较为普及的技术,很多人做项目、做调查,都离不开大量数据的支撑,编写爬虫似乎成了大家一致的选择。准入门槛低、网上现成的代码使得网络上爬虫横行。[8]然而,爬虫又面临着很多问题,比如爬虫是自动化的访问大量网页,访问速度快,频率高,占用了服务器大量的带宽,如若短时间访问量过于巨大,轻则造成对方服务器反映缓慢,影响到正常用户的访问,重则给予对方服务器类似于Dos攻击的效果,造成服务器的宕机。根据反爬虫专家的述说,其一个页面每分钟的浏览量大概能达到1.2万,真实的用户大约有500人,爬虫流量占比达到了98%。其次,网络爬虫还面临着一定的法律风险。现如今,知识产权观念深入人心,网站上的内容作为其公司经济利益与知识产权的载体,理应收到一定的保护[9]。相关法律法规出台的滞后性、适用法律的模糊性以及技术手段的多样性都造成了如今使用爬虫可能面临一定的风险。某些网站本身商业利益来源就是其数据,这类网站会想方设法对爬虫行为进行限制。
反爬虫[1;2],顾名思义,是与爬虫技术相对抗的一种技术,具体又指一系列限制网络爬虫行为的技术集合。一般网站从多个方面进行反爬虫:
第一,基于请求头Headers。Headers是HTTP协议的一部分,是区分人与机器的最简单的方式,浏览器在请求网页时,会带上自身的User-Agent、Cookie等字段,而爬虫进行爬取时,默认是没有这些字段的。如果服务器收到的请求缺失了这几个字段,基本可判定是爬虫程序在对网页进行访问,从而达到对其封禁。这是最基础的反爬虫手段。
第二,IP限制。爬虫与人访问网页最大的区别在于,爬虫一般完成的是短时间内超一般数量的访问,而人对网页的访问一般呈现随机性与线性增长性。基于此,可以完成一种十分高效的反爬手段:IP封锁。如若某个单一IP在短时间内的访问量超出了某个既定的阈值,则可判断此访问行为非人所为,可对其进行封禁。此方式虽然高效且实现简单,但仍有一定的缺陷,其一,仍然有一定的几率将正常访问网页的用户封禁,这种误伤行为将极大的影响自身的服务;其二,随着时代的发展,网上有大量免费高匿代理IP可以获取,还有很多专门出售爬虫高匿代理IP的网站,获取较为容易。本系统在开发初期,曾遭遇多次严重的IP封禁。
图1-2 IP被封禁
第三,数据异步加载。数据异步加载指的是一次不加载网页的全部内容,原本是为了提高网络访问速度的一种方式,现在在反爬虫领域也大放光彩。爬虫一般爬取到的是Html页面信息,而不是异步加载刷新之后的代码,所以网页设计者可以将需要重点保护的数据使用异步加载技术加载到html代码中,这样既不会影响到正常用户的访问,又可以对爬虫进行很好的抵抗。异步加载一般采用JavaScript实现,对爬虫编写者的能力要求较高,此类反爬技术可以挡掉相当部分的网络爬虫。
第四,网络流量与日志分析。网络管理员对网络流量数据进行检查,分析日志,从中分析出异常访问,对其加以限制。此方法自动化程度不如前几种反爬技术,但仍是一种现在不可忽视的反爬手段,一些精心编写的爬虫只有采用此种方法才可被发现。
第五,验证码。验证码是一种区分当前用户是程序机器人还是人的识别程序。一般来讲,计算机很难通过该图灵测试,所以对异常访问进行重定向至输入验证码页面这种反爬措施十分有效。
原则上来讲,没有一种最完美反爬的技术可以阻挡爬虫的进攻,商业公司与爬虫编写人员之间的较量有时比拼的并不只是技术,而是代价。如果爬虫编写者应对某网站的反爬措施需要花比反爬者更大的价值,编写者一段时间后也将失去爬取的兴趣;如果反爬人员需要花费更大的时间精力来阻止一个精心设计的爬虫,如若该爬虫对网站的利益影响没有那么大,一般公司的技术人员会选择放弃与之较量,任其爬取。反爬虫是一场矛与盾的较量。对于爬虫编写者来说,如何能找到一些适合当前任务的抓取策略,既避免遭到网站的封禁,又能避免对该网站的稳定性与经济利益造成影响,是个值得继续研究的问题。
在国内,同样存在很多的研究单位和高校学者对分布式网络爬虫系统作了大量的研究,很多优良的网络爬虫系统也随之产生。
2017年,孙锐设计并实现了基于Hadoop的分布式网络爬虫系统,深入的阐述了网络爬虫技术的爬行任务部署、工作状态和系统架构设计,并且,阐述了基于Hadoop分布式平台技术,包括MapReduce分布式计算模型和HDFS分布式文件系统。最终设计并且实现了一个基于Hadoop分布式网络爬虫系统。
同样在2017年,马联帅设计的基于Scrapy数据采集框架的分布式网络新闻抓取系统,在深入分析网络新闻爬虫特点的基础上,根据需要抓取的新闻网站的数据排版特点,来设计抓取的字段关键字信息和爬虫的运行策略。当遇到动态网页时,使用Selenium技术来解决动态网页的字段关键字抓取问题,使用Redis数据库管理系统来管理主从结构的分布式网络爬虫系统。系统采用Scrapy网络爬虫框架,Scrapy自带下载中间件,可以有效的解决Ip地址被屏蔽的问题。
2019年,李文龙详细研究了ocker集群的编排管理工具,基于ocker集群的Web爬虫系统,掌握编排管理工具的工作原理以及调度机制和管理并将它应用在分布式网络爬虫系统。随之,一个适合Docker集群的分布式网络爬虫模块被设计和实现出来,开发人员将这些系统模块根据需求组合起来,最终形成了高效便捷的Web爬虫系统。这个基于Docker集群的Web爬虫系统采用Kubernetes集群编排管理工具,使用此编排管理工具来对系统的各个功能模块进行统一的部署和管理,以最终运行在。ocker集群上为目标。
通过国内外关于网络爬虫系统及Scrapy框架的研究,我们不难看出,研究主要针对某一特定数据类型或特定网站,并没有对不同数据类型,不同网页布局类型进行研究,而我们设计的基于Scrapy框架的数据采集系统,是一个系统工程,在这个系统工程中,每个环节都是紧紧相扣,在一定程度上可以满足对不同网页类型和不同数据类型的采集和管理。
三、选题拟解决的主要问题或创新之处
爬虫实际上就是采集网络上数据的一段程序。这段程序的功能就是从网络上采集需要的数据。目前来说,大多数爬虫是用后台脚本类语言写的,其中Python无疑是用的最多最广的,而且相对于其他语言来说,python相对简单一点,并且页诞生了很多优秀的库和框架。本课题将采用Python作为web爬虫系统实现语言对爬虫进行编写。
一个爬虫的工作流程如下:(1)发起请求;(2)获取响应内容;(3)解析内容;(4)保存数据;所以,爬虫就是从请求内容到获取响应,接着解析内容,最后显示相应或者保存内容的过程。内容需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;如果有网站不愿本站数据流出,则会针对爬虫特性进行识别,将爬虫拒之门外;所以一个完整的爬虫一般会包含如下几个模块:网络请求模块、主机过滤模块、反爬虫对策模块。
四、内容提纲
1 绪论
1.1 选题背景及意义
1.1.1选题背景
1.1.2目的及意义
1.2 国内外发展现状
1.2.1 爬虫技术概述
1.2.2 爬虫设计者所面临问题和反爬虫技术的现状
1.3 研究主要内容
1.4 章节安排
2 系统开发环境及技术介绍
2.1 Robot协议对本设计的影响
2.2 爬虫
2.2.1 工作原理
2.2.2 工作流程
2.2.3 抓取策略
2.3 Scrapy架构
2.3.1 Scrapy:开源爬虫架构
2.3.2 Scrapy框架结构
2.3.3 两种继承的爬虫模式
2.4 MongoDB数据库
2.4.1 NoSQL数据库介绍
2.4.2 MongoDB数据库介绍
2.5 python web框架Django
2.5.1 Django框架介绍
2.5.2 MTV模式
2.5.3 ORM模式
2.5.4 template模板语言
2.5.5 Django工作机制
2.6 semantic UI开发框架
2.6.1 semantic介绍
2.6.2 semantic开发
2.7 高德地图API
3 可行性分析及需求分析
3.1 业务需求分析
3.2 功能性需求分析
3.2.1 数据爬取功能
3.2.2 数据可视化功能
3.3 可行性分析
3.3.1 技术可行性
3.3.2 经济可行性
3.3.3 法律可行性
4 总体设计
4.1 系统逻辑层次
4.2 系统分布式设计
4.3 系统功能设计
4.4 系统数据库设计
4.4.1 数据库环境搭建
4.4.2 数据库表设计
5 功能模块的设计与实现
5.1 数据爬取模块
5.1.1 爬取策略的设计
5.1.2 网页数据提取
5.1.3 去重与增量爬取
5.2 反反爬虫模块
5.2.1 模拟浏览器行为
5.2.2 动态代理IP
5.2.3 爬虫异常处理
5.3 数据存储模块
5.4 数据可视化模块
6 功能模块测试
6.1 测试环境及工具
6.2 系统功能测试
6.2.1 数据爬取功能测试
6.2.2 数据存储功能测试
6.2.3 数据反反爬虫功能测试
6.2.4 数据可视化功能测试
结束语
五、写作过程中可能遇到的困难和问题以及解决的措施
时代在发展,技术在进步,互联网改变了全世界,各行各业都在这个互联网时代寻求自身的增长点,人们的日常生活也越来越离不开互联网。以二手房为例,线下二手房行业持续遭到冲击,越来越多的年轻人选择在互联网上挑选房源。然而网上信息混杂,数据来源众多,如何提升二手房用户体验就成了一个值得探讨的问题。
我国二手房人口基数庞大,导致在互联网上寻找合适的二手房成了人们不得不面对的问题。网络中提供二手房信息的网站很多,用户寻找房源时往往由于使用习惯等原因主要在一个平台上寻找,若找不到心仪的房源,又将面临辗转各个二手房信息平台,为用户带来不便。笔者认为,对生活有实际意义的软件系统才称得上是一个好系统,结合以上背景,本系统实现一个基于Web爬虫技术的链家网站二手房价格爬取分析系统。
六、主要参考文献
[1]潘晓英, 陈柳, 余慧敏,等. 主题爬虫技术研究综述[J]. 计算机应用研究, 2020, 037(004):961-965,972.
[2]刘爱琴, 王友林, 尚珊. 基于爬虫技术的关键词关联推荐算法优化与实现[J]. 情报理论与实践, 2018, 041(004):134-138.
[3]丁晓东. 数据到底属于谁?——从网络爬虫看平台数据权属与数据保护[J]. 华东政法大学学报, 2019, v.22;No.126(05):70-84.
[4]张海涛, 张枭慧, 魏萍,等. 网络用户信息检索行为研究进展[J]. 情报科学, 2020, v.38;No.345(05):171-178.
[5]钟机灵. 基于Python网络爬虫技术的数据采集系统研究[J]. 信息通信, 2020, No.208(04):101-103.
[6] 朱震. 利用Python设计网络爬虫系统[J]. 数字化用户, 2019, 25(014):83,216.
[7]孙冰. 基于Python的多线程网络爬虫的设计与实现[J]. 网络安全技术与应用, 2018, 000(004):38-39.
[8]张元. 基于Python网络爬虫的设计研究——K12教育教学网数据获取[C]// 教育部, 2017.
[9]戚利娜, 刘建东. 基于Python的简单网络爬虫的实现[J]. 电脑编程技巧与维护, 2017(8).
[10]巫宇超, 鲍正德, 唐娅雯. 基于Python的网络爬虫[J]. 计算机系统网络和电信, 2019, 001(002):P.277-281.
[11]郭锋锋. 基于python的网络爬虫研究[J]. 佳木斯大学学报(自然科学版), 2020, 038(002):62-65.
[12]李培. 基于Python的网络爬虫与反爬虫技术研究[J]. 计算机与数字工程, 2019, 47(6).
[13]朱震. 利用Python设计网络爬虫系统[J]. 数字化用户, 2019, 25(014):83,216.
[14] 孔洁,刘杨. 数据挖掘技术分析[J].电脑知识与技术.2017(32)
[15] 涂小琴. 基于Python爬虫的电影评论情感倾向性分析[J]..现代计算机(专业版).2017(35)
[16] 曲伟峰. 浅析Python网络爬虫[J]. 计算机产品与流通, 2019(9).
七、进度安排(参照本批次论文写作时间安排填写)
序
|
设计(论文)各阶段名称
|
起 止 日 期
|
1
|
选题
|
2021.05.31-2021.06.07
|
2
|
撰写论文开题报告并提交
|
2021.06.15-2021.06.24
|
3
|
准备资料、撰写修改并提交论文初稿
|
2021.07.26-2021.08.12
|
4
|
准备资料、撰写修改并提交论文二稿
|
2021.08.31-2021.09.13
|
5
|
论文定搞、打印装订并提交论文终稿
|
2021.09.28-2021.10.08
|
6
|
论文答辩
|
|