基于用户浏览行为模拟的分布式web数据采集系统

 2021-11-26 10:11

论文总字数:18837字

摘 要

由于互联网信息爆炸式的增长,人们对信息的收集整理,以及索引的需求不断增加。为了能自动化地采集,收集网络的信息,网络爬虫应运而生。而互联网的开放性使得许多公司都会在网页上提供公司产品等许多商业信息以便用户获取。所以说,对商业信息的采集与分析便成了许多公司之间竞争的一个切点。

本文站在信息获取方的角度,阐述了如何设计以及构架一个信息采集系统,以定制化地采集并存储大量的信息。本文主要将web数据采集系统分为两个部分,第一个部分是前端爬行器,第二个部分是存储设施。在前端的构架部分,由于主要使用开源的基础设施,所以重点阐释了其分布式构架的设计,并研究了针对一定的反爬取策略的应对方法(模拟用户的浏览行为)。在后端的设计部分,主要研究了一个为快速随机写入与顺序读取优化的存储引擎的实现,并且给出了这个实现与不同KV存储以及关系形数据库的性能对比,以及其不同使用场景。

关键词:网络爬虫,分布式,存储引擎, 数据库

A DISTRIBUTED WEB CRAWLER BASED ON USER’S

WEB BROWSING BEHAVIOR

Abstract

Due to the explosive growth of Internet information, the demand for information collection and indexing is increasing. In order to automate the collection, gathering information from network, the web crawler came into being. The open nature of the Internet pushes many companies offer their company's products, and many other business information on the Web for users to access. So, the collection and analysis of business information has become a lot of competition between the companies.

In this paper, we explains how the design and architecture of an information gathering system to collect and store a large amount of information. In this paper, the web data acquisition system is divided into two parts, the first part is the front crawler, the second part is the storage facility. In the front part of the frame, since the main usage of open source infrastructure, we focus on explaining its distributed architecture design, and some strategies to deal with anti-crawling method (based on user's browsing behavior). In the design part of the rear end, we explains the realization of a write-optimized storage engine for fast random writing and sequential reading, and gives the benchmarks of our realization, KV memory storage and relational database, as well as their different usage scenarios.

KEY WORDS: web crawler, distributed system, storage engine, database

目 录

基于用户浏览行为模拟的分布式web数据采集系统 I

摘 要 I

Abstract II

第1章 绪论 5

1.1 万维网背景与网络爬虫的诞生 5

1.1.1 网络爬虫的必要性 5

1.1.2 网络爬虫的分类 6

1.2 网络爬虫的技术栈 6

1.2.1 抓取策略 7

1.2.2 网页分析方法 8

1.3 功能分析 9

1.3.1 功能划分 9

1.3.2 功能描述 9

1.4 性能需求 9

1.4.1 爬行前端 9

1.4.2 存储性能要求 9

1.4.3 其他需求 9

第2章 总体设计 10

2.1 整体框架设计 10

2.1.1 总览图 10

2.1.2 前端设计 10

2.1.3 后端设计 10

2.1.4 对外提供接口 11

2.2 前端架构 11

2.2.1 前端工作逻辑划分 11

2.2.2 任务调度器 11

2.2.3 消息队列 11

2.2.4 爬行器 11

2.3 后端实现原理以及细节 13

2.3.1 基础组件以及需求 13

2.3.2 实现方案 13

第3章 性能测试方法与数据 20

3.1 存储引擎基准测试 20

3.1.1 单机测试 20

参考文献 21

致谢 22

绪论

万维网背景与网络爬虫的诞生

互联网(英语:Internet),又称网际网路,或音译因特网、英特网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。这种将计算机网络互相联接在一起的方法可称作“网络互联”,在这基础上发展出覆盖全世界的全球性互联网络称互联网,即是互相连接一起的网络结构。互联网并不等同万维网,万维网只是一建基于超文本相互链接而成的全球性系统,且是互联网所能提供的服务其中之一。

1986年,美国国家科学基金会(National Science Foundation,NSF)利用ARPAnet发展出来的TCP/IP 的通讯协议,在5 个科研教育服务超级电脑中心的基础上建立了NSFnet广域网。

1989年,在普及互联网应用的历史上又一个重大的事件发生了。TimBerners和其他在欧洲粒子物理实验室的人----这些人在欧洲粒子物理研究所非常出名,提出了一个分类互联网信息的协议。这个协议,1991年后称为WWW(World Wide Web),基于超文本协议――在一个文字中嵌入另一段文字的-连接的系统,当你阅读这些页面的时候,你可以随时用他们选择一段文字链接。

直到现在,互联网的发展可能在各种纬度上早已超出了当时人们的预想。而随着信息的不断增长,互联网涵盖的内容也越来越多,从原来简单的静态文字,到现在互联网上充斥着形形色色,各式各样的动态页面,图片,语音,甚至在线应用。所以慢慢地,人们迫切地需要快速便捷以及自动化的工具来采集互联网上的信息。于是乎,网络爬虫,互联网的“robot”诞生了。

网络爬虫的必要性

网络爬虫(也叫做网页蜘蛛,或者网络机器人),网络爬虫能按照一定的规则,自动的抓取万维网信息,爬虫本身其实是程序或者脚本。一个自治的网络爬虫能全自动地,不断地获取网络上的信息。不断发展的互联网,带给了我们无间断的信息流,也给我们带来了需多挑战,特别是对于海量信息的采集,检索,以及对大量数据的分析工作变得越来越复杂,曾经可以手动分析的数据,可能现在用计算机都需要花上很长的时间才能分析完毕,对数据的快速定位以及检索也成为了现在许多系统的瓶颈。现在的商业搜索引擎公司(例如百度,google)背后有巨大的集群来定期爬取万维网上的信息,然后提供web的访问接口供用户使用,以检索到用户所需要的东西,成为万维网的入口以及指南。然而,不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果包含大量用户不关心的网页,所以定制化地爬取数据成为了一些有开发能力的个人以及公司所需要采取的策略。

因此,对商业信息的采集便成了互联网公司之间竞争的一个切点。互联网的开放性使得许多公司不得不在网上公开相当多的商业信息,以便用户能快速地访问并且获悉公司的产品。那么在做竞品的公司面前,对方所公开的数据很可能就提供了不少商业数据分析的余地,所以说,站在网络上公开提供数据的公司一方来说,避免竞争对手来采集,获取自己的数据便成为了必要的工作之一。站在制作竞品公司的角度,准确地采集对方的信息,对数据进行分析变成了主要的竞争力之一。

网络爬虫的分类

其实网络爬虫本身已经是个比较专注的领域了,如果要对这样的一个技术领域进行一定的分类或许比较牵强,比如若从线程的角度分类,爬虫大概可以分为单线程爬虫和多线程爬虫,但是这样的分类或许太基础以及简单,并没有提供太多的信息,或者给开发者提供必要的指导性的知识。再如从适用领域来说一般可以分为通用的(普世的)网络爬虫和聚焦爬虫,要解释通用网络爬虫或许有些困难,或者过于概念化,缺少对比。不过对比起来解释聚焦的爬虫相对容易一点。聚焦爬虫主要就是指对某类型的网站,某类的主题“聚焦”。无论是通过人工筛选的方式还是通过机器学习,神经网络等自动化的方式来发现,分类网站,并“专注于”对关注的主题爬取(过滤掉非关注的页面),都被归类为聚焦爬虫。于是相反的,那些像百度,谷歌这样的公司所开放的面对普通用户的搜索引擎背后的爬虫便是广义上(非聚焦)的网络爬虫。由于现在互联网信息的数量级以及小型公司的财力等多方面问题,要制作非聚焦爬虫采集海量的数据是非常困难以及难以实现的,并且由于信息检索方面的技术壁垒还是比较深,所以大多数商业公司所适用的都是聚集爬虫。而现有聚焦爬虫对抓取目标的描述可分为基于目标网页特征、基于目标数据模式和基于领域概念3种。然而由于爬虫的分类并不是本文所要主要阐述的问题,而且深入下去其实有很多算法的种类可以分,所以在这里就不继续讨论分类的问题。

网络爬虫的技术栈

概念:网络爬虫是游行于万维网,互联网上面独自运行的软件程序,能够不断地筛选数据,做出一定的抉择,是跳过这个网页还是下载这个网页,能够互联网上的通信协议获取文本或者进行搜索查询等操作,按部就班地完成任务。网络爬虫之所以叫机器人,一定的程度上可能是因为现在的机器学习神经网络等技术促进网络爬虫像智能化的角度发展,所以叫“机器人”而不是“机器”,然而另一个方面,可能更为重要,那就是,网络爬虫会自动地完成它们的任务,这个自动其实也是狭隘的,工程师本质上还是需要制定一定的策略,分析方法以及规则来使得这个爬虫在完成我们所希望它完成的任务。虽然工程师还是需要参与一定的规则的制定,但是这并不代表这个系统不够自动,需要工程师全程地跟踪操作。一般来说,网站,网页都有一定的规则特性,现在的网页都是动态网页,也就是说,同一个网站的不同产品页面,可能都是使用的一个模版,每次请求不同的url,他们会调用后台不同的程序来渲染网页,于是乎,相同构架的页面可能就会被渲染为不同内容的页面。同样的道理,一般网站主为了比较好的管理页面url之间的映射,比如使用restful构架,使得我们能比较容易地通过url来预测实际网站的内容,那么我们并不需要非常智能的网络爬虫来获取信息,我们知道了一定的规则之后,我们便能使用程序来代替我们完成采集任务。网络爬虫仔本文所述的分布式信息采集系统中便是这样的一个角色。智能爬虫本身的研究不是本文所论述的重点。本文更多地将重点放在分布式的构架上和一些细节的实现上(后端的存储架构)。由于很多时候,技术的细节决定着一个项目的成败,所以我觉得这个是非常有必要进行论述的。

抓取策略

爬虫的工作策略一般则可以分为累积式抓取(cumulative crawling)和增量式抓取(incremental crawling)两种。这里的抓取策略不是狭隘的爬行策略,狭隘的爬行策略一般来说主要是BFS
和DFS两种(其实还有最佳优先策略,以及一些通过网页分析算法实现的更复杂的策略)。而抓取策略是站在一个更高的角度,是站在数据采集的角度对采集怎样的数据的策略进行分类。

累积式抓取是指从某一个时间点开始,通过遍历的方式抓取系统所能允许存储和处理的所有网页。在稳定运行的情况下,网络爬虫运行相当的时间,以获得更多的网页内容,更广泛的数据。累积式抓取的策略可以保证抓取到相当规模的网页集合。但由于Web数据的动态特性,集合中网页的被抓取时间点是不同的,页面被更新的情况也不同,因此累积式抓取到的网页集合事实上并无法与真实环境中的网络数据保持一致,很有可能这个网页的数据已经改变了,但是在我们的数据集合中的内容还是没有改变的。

增量式抓取是指在具有一定量规模的网络页面集合的基础上,采用更新数据的方式选取已有集合中的过时网页进行抓取,以保证所抓取到的数据与真实网络数据足够接近。进行增量式抓取的前提是,系统已经抓取了足够数量的网络页面,并具有这些页面被抓取的时间信息比如时间戳,然后将新的页面下载下来进行对比或者一定的分析以确定是否是新的页面,但是在一定的数据规模的情况下,增量式的抓取或许会非常的困难,虽然说抓取本身并不是个什么难事,对不同网页进行不同的分析,定制不同的更新策略也不是什么难事,但是面临巨大的数据量,要定期的更新一定量(可能一定量也是非常大的集合)的数据将是非常困难的。

面向实际应用环境的网络蜘蛛设计中,通常既包括累积式抓取,也包括增量式抓取的策略。累积式抓取一般用于数据集合的整体建立或大规模更新阶段;而增量式抓取则主要针对数据集合的日常维护与即时更新。

在确定了抓取策略之后,如何从充分利用网络带宽,合理确定网页数据更新的时间点就成了网络蜘蛛运行策略中的核心问题。

剩余内容已隐藏,请支付后下载全文,论文总字数:18837字

相关图片展示:

您需要先支付 80元 才能查看全部内容!立即支付

该课题毕业论文、开题报告、外文翻译、程序设计、图纸设计等资料可联系客服协助查找;