基于云平台的网页抓取架构的研究与设计
2018-10-25范顺利周亦敏
范顺利 周亦敏
摘 要: 随着网络数据的迅速增长,网页数据抓取在处理大量数据时遇到了一些挑战,例如大量数据存储,需要密集计算能力以及数据提取的可靠性。提出了一个基于云平台的网页数据抓取架构,该架构使用AWS(Amazon Web Services)作为云平台,按需配置计算资源和数据存储;Selenium作为网页自动化工具,调用WebDriver API能够模拟用户使用浏览器。通过实验,比较了该架构与其他基于云的网页抓取架构的不同,并分析了它的优势。
关键词: AWS; 网页抓取; 大数据; Selenium
中图分类号:TP311.5 文献标志码:A 文章编号:1006-8228(2018)09-21-04
Abstract: With the rapid growth of data on the Internet, web scraping encounters a number of challenges in processing large amounts of data, such as large amounts of data storage, the need for intensive computing capabilities, and the reliability of data extraction. So, a web scraping architecture based on the cloud platform is proposed. The architecture uses AWS (Amazon Web Services) as the cloud platform and configures computing resources and data storage on demand. Selenium is a web page automation tool; the supported WebDriver API simulates the process of users using the browser. Through experiments, the differences between this architecture and other cloud-based web scraping architectures are compared, and its advantages are analyzed.
Key words: AWS; Web scraping; big data; Selenium
0 引言
互聯网提供了大量数据集, 但是很多数据都被嵌入到网页结构与样式中[1]。将可用的信息从网页中提取出来,挖掘其潜在价值,使其在金融、数据分析以及其他科学领域发挥重要作用。目前现有的多数解决方案主要侧重于网页数据的采集,数据采集是与数据科学相关的任何研究和开发的初步工作,而这只是大数据的第一步。因此,对于数据科学领域,提取网页数据并运用到数据科学领域十分重要。
网络上的大多数信息都是以HTML文档的形式呈现的,这些数据都是非结构化数据[2]。由于非结构化数据不遵循任何数据模型,因此信息提取并不容易。网页数据提取的过程包括:网页数据的解析、过滤、格式化结果和存储。在分布式计算领域,处理大量的网页抓取,可以使用BeautifulSoup,Requests和Scrapy[3]等各种库,但是,它们只能在静态页面上工作。因此,选择Selenium作为网页自动化工具,Python的HTMLParser库用于从HTML中提取数据[4]。使用Amazon Web Services的EC2(弹性计算云)作为云平台,选择EC2的原因在于其灵活性,可根据需要创建,启动和终止EC2实例,以及对大数据应用程序的支持。
1 简介
随着软件产业的发展,网页数据采集也经历了不同的发展阶段,从最早期的人工复制整理数据,到如今的基于云计算的大数据采集,每一次产业技术的革新都伴随着硬件和软件的巨大进步和发展[5]。云计算通过高度密集的计算能力和支持弹性资源,使其成为个人企业以小资源开始自己的网页抓取的最佳选择。下面介绍一些基于云平台的网页抓取。
1.1 Import.io
Import.io是一个基于云平台,在不编码的情况下从不同网站抓取网页,所有提取的数据都存储在其云服务器上。它允许将数据下载为CSV,Excel,Google表格,JSON或通过API访问。其独特的功能包括自动数据和图像提取,自动页面链接、监控、调度和无需编码。
1.2 WebScraper.io
WebScraper.io是另一种可视化网页抓取平台,它提供Web Scraper和Web Scraper Extension的两种方式。对于Google Chrome浏览器,Web Scraper Extension工具可以免费使用,用户可以创建一个sitemap,制定如何抓取。而对于基于云的Web Scraper,它的使用价格取决于要抓取的URL数量。
1.3 Scrapy
Scrapy是一个免费的开放源代码和协作式网页抓取框架,通过编写代码并调用API提取网页数据。Scrapy是用Python编写的,可以部署在Scrapy云中,可以按需扩展[6]。其特点是快速,简单,可扩展等。
以上解决方案主要侧重于网页数据的采集,而这只是大数据的第一步。鉴于大数据的进一步处理,构建了基于云的网页抓取框架(Cloud-Scraper)。
2 系统设计
2.1 Scraper介绍
图1显示了一个传统的Scraper概况,客户端向ScrapeHub提供URL以及网页抓取配置。ScrapeHub程序启动,处理和监视系统中的所有任务,它是用Python语言编写的。然后ScrapeHub启动Scrape Engine任务,Scrape Engine初始化一个网页,使用Selenium库将网页转化到所需状态,使用Requests库对其进行解析。不同的Scraper可能使用不同的库来解析和初始化网页。在这里,只提到了Selenium和Requests,所有数据都存储在数据库中。这个模型代表了传统的顺序抓取网页数据的方法,一次只能抓取一个站点,只能在给定的时间段内提取有限的数据。通过添加更多的计算和存储资源,可以消除这种限制,但随着需求的增长,维护将变得非常昂贵和困难,所以这个方法不是很灵活适用。
2.2 Cloud-Scraper设计
使用Amazon弹性计算云(EC2),通过简单队列服务(SQS)和简单存储服务(S3)[7],可以解决上述问题。Amazon S3用于存储Amazon机器映像,能够根据需要创建尽可能多的EC2实例,具有经济高效的灵活性。图2说明了Cloud-Scraper的架构,该体系结构的前端是Web浏览器,通过REST API连接到Amazon Web Server。位于云端的ScrapeHub将处理所有客户端的抓取请求以及处理和监控事件,使用Amazon SQS来维护要被抓取的URL列表。Amazon SQS处理两个队列;一个是请求队列,另一个是响应队列。Scrape Engine是一个以URL作为输入并抓取网页内容的程序,每个EC2实例都是运行Scrape Engine的虚拟机。DynamoDB是一款免费且开放源码的NoSQL数据库,可为提取的数据提供存储[8]。
图3显示了Cloud-Scraper的网页抓取流程,当用户对Cloud-Scraper发送抓取请求时,请求会转到ScrapeHub,该请求包含两个信息:URL和抓取配置。首先,ScrapeHub将URL划分为多个块,并将它们转发到S3存储,同时创建多个EC2实例,以及创建SQS请求队列和响应队列。ScrapeHub在SQS请求队列的帮助下向EC2实例发送服务请求,處理请求的顺序以先进先出(FIFO)调度方式完成。ScrapeHub创建的请求队列上的每个请求都有一个特定的ID,通过响应队列持续监视整体抓取的进度,抓取结果存储在DynamoDB中。
Amazon EMR(Amazon Elastic MapReduce)是一种Web服务[9],使用Hadoop处理方法,并结合Amazon EC2,能够以高效率轻松处理大量数据。Cloud-Scraper集成了大数据应用程序,抓取的网页数据能够可视化分析。
3 实验分析
图4显示了使用不同方案完成网页抓取所需的时间,包括请求时间,排队时间,处理时间和来自云端的响应时间,X轴表示URL的数量,而Y轴表示网页抓取完成的时间。图中上面的两条线表示使用单个机器和使用单个机器上的多个线程的抓取完成时间,下面的两条线表示使用20台机器和使用20台机器Amazon EC2的T2实例完成抓取所需的时间。可以看到,使用单节点本地机器,最多可以抓取4000个网页数据,这是由于服务器限制单个IP在有限的时间内访问有限的数据而导致的。在单个机器中执行并发线程也是一样,尽管计算速度比顺序节点快得多,但抓取效率随着URL的增加而下降。下面的两条线的抓取完成时间大致是线性的,表明随着URL数量逐渐增加,Cloud-Scraper能够正常运行。可以推断出,Cloud-Scraper架构是可扩展的,并且可依据抓取的URL数量增加EC2实例。
许多基于云的网页抓取解决方案都是可用的,但其中大部分都是商业的,其工作模式不是公开的。因此,与一些现有的开源框架进行比较,如Scrapy和Import.io。图5显示了使用一台机器实例,Cloud-Scraper完成网页抓取时间与其他基于云平台的对比。与其他框架相比,Cloud-Scraper架构是分布式的,对可以使用的计算资源的实例没有限制,在Amazon云中的DynamoDB的帮助下,可以灵活地使用所有资源。由于Selenium的使用可能会延迟一段时间,抓取完成时间比Import.io的抓取完成时间多,但它的缺点已被优势所超越, Selenium提供了更高的可靠性,以及对人类行为的模仿效果更好[10]。在数据提取方面,其性能与目前市场上的其他基于云的网页抓取架构相当,还可以与其他大数据应用结合使用,最终被抓取的数据将进入大数据处理。
4 Cloud-Scraper的优势
Cloud-Scraper有很多优点。其中一些描述如下:
⑴ 成本效益:使用云资源按次付费模式,能够以便宜的价格使用云资源,可以按需扩展或缩减,比维护自己的云更便宜[11]。云供应商几乎可以提供从存储到处理能力所需的一切,使得云计算更简单。购买自有资源,维护和扩大需求的费用会很高。
⑵ 可扩展性:云供应商根据需要提供可靠的计算机,可以根据需要创建和使用这些机器的多个实例。供应商提供大量选择平台的选项,根据对计算的性能需求,可以选择正确的处理能力[12]。
⑶ 大数据应用的集成:任何大数据应用都需要四个基础架构——存储,处理,分析软件和网络。DynamoDB是NoSQL数据库,可提供更高的可用性,从而获得更好的性能。分析软件可以根据用户的需求在此架构上编程,借助Amazon的EC2,可以在数量和计算能力上扩展。尽管这种架构并未完成所有大数据需求,但进一步的程序集成和修改可以使其对于大数据任务更加稳健。
5 结论
本文提出一种新的基于云平台的网页抓取架构,Amazon的云服务为分布式环境中的计算和存储提供弹性资源,为网页抓取提供了更好的平台。通过实验测试了该架构的可扩展性,并简单地将它与其他网页抓取架构进行了比较,分析其优点,包括Selenium的使用和对大数据应用程序的集成。此外,也可以使用其他云服务来实现上述架构。
参考文献(References):
[1] 魏冬梅,何忠秀,唐建梅.基于Python的Web信息获取方法研究[J].软件导刊,2018.17(1):41-43
[2] 郎波,张博宇.面向大数据的非结构化数据管理平台关键技术[J].信息技术与标准化,2013.10:53-56
[3] 刘宇,郑成焕.基于Scrapy的深层网络爬虫研究[J].软件,2017.38(7):111-114
[4] 齐鹏,李隐峰,宋玉伟.基于Python的Web数据采集技术[J].电子科技,2012.25(11):118-120
[5] Keven.网页数据采集的发展历史以及未来前景[EB/OL].http://www.bazhuayu.com/blog/wysjcjfzls.
[6] 刘硕.精通Scrapy网络爬虫[M].清华大学出版社,2017.
[7] 徐鸿飞.云计算安全问题初探——基于Amazon Dynamo与EC2的架构分析[J].计算机光盘软件与应用,2013.16(17):21-22
[8] 孙宝华.基于Dynamo的存储机制研究[D].西安电子科技大学,2013.
[9] 滕晓龙.如何为Hadoop选择最佳弹性MapReduce框架[EB/OL].https://searchcloudcomputing.techtarget.com.cn/5-10795
[10] 杜彬.基于Selenium的定向网络爬虫设计与实现[J].金融科技时代,2016.7:35-39
[11] Jackson K R, Muriki K, Thomas R C, et al. Performance and cost analysis of the supernova factory on the amazon AWS cloud[J]. Scientific Programming,2011.19:2-3
[12] Juan J D, Prodan R. Multi-objective workflow scheduling in amazon EC2[J]. Cluster Computing,2014.17(2):169-189