Bo Zhao
College of Earth, Ocean, and Atmospheric
Sciences, Oregon State University, Corvallis, OR,
USA
从互联网上抓取数据的过程可以分为两个顺序步骤;获取web资源,然后从所获取的数据中提取期望的信息。——具体来说,网络抓取程序通过编写HTTP请求来从目标网站获取资源。此请求可以格式化为包含GET请求的URL或包含POST请求的HTTP消息。一旦目标网站成功接收并处理了请求,所请求的资源将从网站中检索,然后发送回给定的网页抓取程序。资源可以是多种格式,例如从HTML构建的网页、XML或JSON格式的数据源,或者图像、音频或视频文件等多媒体数据。下载web数据后,提取过程继续以结构化的方式解析、重新格式化和组织数据。
web抓取程序有两个基本模块——一个用于编写HTTP请求的模块,如Urlib2或selenium,另一个用于解析和提取原始HTML代码中的信息,如Beautiful Soup或Pyquery。
在这里,Urllib2模块定义了一组处理HTTP请求的功能,如身份验证、重定向、cookie等,而Selenium是一个web浏览器包装器,它构建了一个web服务器,如Google Chrome或Internet Explorer,并使用户能够通过编程自动浏览网站。
关于数据提取,Beautiful Soup是为抓取HTML和其他XML文档而设计的。它提供了方便的Python函数,用于导航、搜索和修改解析树;用于分解HTML文件并通过lxml或html5lib提取所需信息的工具包。Beautiful Soup可以自动检测正在处理的解析的编码,并将其转换为客户端可读的编码。类似地,Pyquery提供了一组类似Jquery的函数来解析xml文档。但与Beautiful Soup不同,Pyquery只支持lxml进行快速XML处理。
在各种类型的网络抓取程序中,有些程序是为了自动识别页面的数据结构而创建的,如Nutch或Scrapy,或者是为了提供一个基于网络的图形界面,消除了手动编写网络抓取代码的需要,如Import.io。Nutch是一个用Java编写的健壮且可扩展的网络爬虫。它支持细粒度配置、并行收获、robots.txt规则支持和机器学习。Scrapy是用Python编写的,是一个可重用的网络爬行框架。它加快了构建和扩展大型爬行项目的过程。此外,它还提供了一个基于网络的外壳来模拟人类用户的网站浏览行为。为了让非编程人员能够获取网络内容,专门设计了带有图形界面的网络爬虫,以降低使用网络抓取程序的复杂性。其中,Import.io是一个典型的爬虫,用于在不编写任何代码的情况下从网站中提取数据。它允许用户识别非结构化网页并将其转换为结构化格式。Import.io用于数据识别的图形界面允许用户训练和学习提取内容。然后,提取的数据存储在专用的云服务器中,并可以CSV、JSON和XML格式导出。具有图形界面的基于web的爬网程序可以基于SVG或WebGL引擎轻松地获取和可视化实时数据流,但在操作大型数据集方面存在不足。
网络抓取可用于多种场景,如联系人抓取、价格变化监测/比较、产品评论收集、房地产列表收集、天气数据监测、网站变化检测和网络数据集成。例如,在微观规模上,可以定期刮取股票价格,以可视化价格随时间的变化(Case等人,2005年),可以集体刮取社交媒体订阅源,以调查公众意见并确定意见领袖(刘和赵,2016年)。在宏观层面上,几乎每个网站的元数据都被不断地刮来构建互联网搜索引擎,比如谷歌搜索或必应搜索。