数据可视化:从小白到数据工程师的成长之路
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.6 抓取工具

网页抓取(Web Scraping,也称为网络数据提取或网页爬取)是指从Web页面上获取数 据,并将获取到的非结构化数据转化为结构化的数据,最终可以将数据存储到本地计算机或数据库的一种技术。

图2.14 山东省环境保护厅的依申请公开流程表

网页抓取可以通过抓取软件实现,也可以自己编写代码完成个性化网页数据抓取(如Python的Beautiful Soup库,具体见2.7和2.8节)。常见的抓取工具非常多,如Dexi.io[27]、OutWit Hub[28]、Mozenda[29]等。本节选取两个工具讲解,分别是import.io和Octoparse。

import.io[30]是一个免费的在线网页抓取软件,可以从网站中抓取数据并整理成数据集,拥有很好的交互设计,使用起来非常简单方便。Octoparse[31]是基于Windows操作系统的网页抓取软件,可以将非结构化或半结构化的数据从网站中抓取后,转化为一个结构化的数据集,整个过程不需编码。这对于不懂编程的人来说是非常有用的。

2.6.1 import.io工具

import.io是最好的数据抓取工具之一,界面非常简单易用,不要求使用者编写任何代码即可自动识别网页结构,抓取内容并生成表格供使用者下载,特别适合抓取内容多且格式统一的Web页面。

例如,进入宜家中文主页[32],在搜索框中输入“椅子”,页面[33]上的数据非常规整,图片、相应文字解释和链接排列整齐。这个页面虽然不是以表格形式呈现,而是做成了图文列表,但呈现出明显的结构化数据,见图2.15。也可以使用浏览器提供的“查看源代码”功能查看右下角呈现多个椅子图片的区域,该区域的HTML标记是<table>,说明所有的椅子图片和相关文字以表格的方式展现在页面上。若没有任何HTML基础,建议先阅读本书第7章相关内容。

图2.15 搜索宜家“椅子”页面

该网站的数据通过复制和粘贴操作,无法被保存成一张清楚的表格。如果会写代码,可以编写抓取程序自动抓取不同层级的页面资料,否则需要通过一些现有的工具如import.io去抓取。

先登录import.io网站[34],再申请账号并登录。单击登录页面右上角的“New”按钮,在新页面的左侧单击“new Extractor”按钮,输入URL地址

http://www.ikea.com/cn/zh/search/?query=+椅子

(注意中文“椅子”可能显示乱码效果),见图2.16。抓取的结果见图2.17,因为篇幅的关系,仅截取了前5条记录。

图2.16 输入URL地址

图2.17 抓取的数据

单击右上角的“Save”,再选择“Save and Run”,运行后的效果见图2.18,可以下载为JSON或CSV格式的可机读数据。

图2.18 下载页面

import.io也会在执行完成后给用户发送一条提醒邮件,也可以在邮件包含的链接中下载数据,见图2.19。

也可以单击图2.20的“Start Magic”,在窗口中输入URL地址,见图2.21。单击右下角的“Download CSV”按钮,下载抓取的数据,在弹出的图2.22中设置抓取的页数。

图2.19 邮件链接下载

图2.20 “Start Magic”模式

图2.21 “Start Magic”模式抓取数据

图2.22 设置抓取的页数

注意,若下载的CSV文件存在乱码,可以使用OpenRefine等软件清理,或者使用第3章介绍的方法完成数据清洗。

2.6.2 Octoparse工具

Octoparse(八爪鱼)采集器是一个功能强大且易用的互联网数据采集平台,可以简单、快速地将网页数据转化为结构化数据,存储为Excel或其他数据库,并且提供基于云计算的大数据云采集解决方案,实现精准、高效、大规模的数据采集。八爪鱼采集器提供多种操作模式,可以满足不同用户的个性化需求。

Octoparse采集器不仅操作简单、功能齐全,还能短时间内获取大量数据,是深圳视界数据技术有限公司自主研发的大数据采集平台。2016年3月,Octoparse海外版在洛杉矶上线了,特别适合批量下载多个Web页面的数据,快速下载页面list/table元素,但不适合批量下载图片。

Octoparse采集器英文版本的下载地址是http://www.octoparse.com/download,中文版本的下载地址是http://www.bazhuayu.com/download,支持的操作系统版本是Windows XP/7/8/10。其中文版虽然是免费的,但需要积分才能导出下载的数据,积分可以通过微信签到或向好友推荐该软件获取,免费版最多10个任务。

Octoparse采集器需要Microsoft.NET Framework3.5Service Pack1[35]的支持,操作系统Windows7/8/10已经内置,不需下载,但Windows XP需要手动提前安装,可到微软官方网站[36]下载,也可以到八爪鱼官方网站提供的镜像[37]下载,文件大小是231.5MB。

建议使用Octoparse6.0或更高的版本,本节使用的版本是Octoparse6.2,其英文版本下载后为OctoparseV6.2Setup.zip文件。安装后,需要账号注册和邮箱激活,见图2.23。

图2.23 Octoparse账号注册

首次运行Octoparse需要登录,见图2.24。勾选“Remember Me”可以免去每次输入账号和密码的麻烦,勾选“Auto Login”实现账号自动登录。在公共机房中不建议勾选这两项。

图2.24 Octoparse账号登录

八爪鱼采集器主界面见图2.25,主界面分为三部分,有三种采集模式,即顶部左上角的控件、左侧的任务栏和右侧的Home主页。

图2.25 Octoparse主界面

顶部左上角包含6个图标,见图2.26。第一个是“Octoparse图标”。第二个是“User center”(个人中心),可以连接到网站的个人中心页面,查看个人的使用数据和任务管理。第三个是“XPath Tool”(XPath工具),主要是高级用户在网页中对数据进行定位时使用。第四个是“RegEx Tool”(正则表达式工具),主要用于生成一条正则表达式,匹配相应的字符串数据。与“格式化数据”中的正则匹配、正则替换有联系。第五个是“Export Scheduler”(导出计划),设置了“自动导出到数据库”后,相应的导出计划会出现在该窗口。第五个是“About”(关于),包含软件当前版本数据、声明,以及软件的检测更新。

左侧的任务栏包含3部分:My Task(我的任务)、Quick Start(快速开始)和Task Status(任务状态)。My Task显示已经创建的各任务组及任务组中的多个任务。Quick Start主要包含任务的创建和导入导出。Task Status可以查看各状态中的任务情况。右侧Home主页的3种采集模式包括Smart Mode(智能模式)、Wizard Mode(向导模式)和Advanced Mode(高级模式)。下面通过实际案例来介绍这三种模式。

图2.26 Octoparse顶部左上角的图标

1.Smart Mode

Smart Mode是八爪鱼最便捷的采集模式,输入网址后可直接将网页中的数据以表格的形式采集下来,并且支持字段数据的删除、修改、翻页、数据的导出等。Smart Mode目前只能采集包含列表或表格数据的网页,即网页源代码中的<list><table>部分。

【案例2-1】以Web页面https://movie.douban.com/top250为例,使用Smart Mode抓取该页面的前25部电影的数据。

<1> 在右侧Home主页顶部输入该URL,再单击“Smart”按钮,Octoparse采集器会新生成一个Smart标签页(注意Home主页顶部的显示内容)。Octoparse采集器抓取数据需要一些时间,本案例抓取的数据少,需要的时间也少,抓取的效果见图2.27。

图2.27 Smart Mode

<2> 编辑数据。如右击列头“pic_link”,在出现的快捷键菜单中选择“Delete”,删除该列。右击列头“hd”,在出现的快捷键菜单中选择“Modify”(见图2.28),修改列头为“name”。注意,列头只能由字母、数字、下划线和中文汉字组成,不能以数字开头。

图2.28 Smart Mode

<3> 导出数据。单击页面右下角的“Export to Excel”按钮,选择保存的位置和文件名,单击“保存”按钮,即可将抓取的数据保存到本地,默认为Excel文件格式。

2.Wizard Mode

Wizard Mode(向导模式)适合初学者使用,根据操作引导设置后就可以采集数据。Wizard Mode包含4种:Single Page(单网页采集)、List or Table(列表或表格采集)、List and Detail(列表及详情页采集)、List of URLs(URL列表采集)。单击图2.29中的某种类型,进入学习界面。

图2.29 Wizard Mode

单击“Start”按钮,进入采集类型选择,或者单击“Home”页面左下角的“Quick Start”后,选择“New Task(Wizard Mode)”,见图2.30,出现的Single Page采集只在一个特定的网页上抓取数据,即采集工作只涉及单个页面的数据。

【案例2-2】用Single Page采集京东帮助页面。

<1> 在“Home”页面单击“Start”按钮,再选择“Single Page Extract”,见图2.31。

图2.30 Quick Start

图2.31 Single Page采集

<2> 定义任务。定义任务的名字、分类和备注数据。任务名和分类有助于以后查找,任务名称对符号、数字等格式没有限制。备注可以记录该任务的重点数据,也可以理解为任务注释,见图2.32。然后单击“Next”按钮。

图2.32 案例2-2的任务定义

<3> 输入URL地址http://help.jd.com/user/issue/291-548.html,见图2.33,再单击“Next”按钮。

图2.33 案例2-2的URL输入

<4> 定义字段。图2.34包含上下两部分,下部分显示第三步URL页面的内容,可以从中单击选择需要抓取的字段,每次选择会在上部分显示生成一个新字段。单击“Add Predefined Fields”,添加当前网页URL、网页标题和当前时间等预定义字段,见图2.35。然后单击“Next”按钮。

图2.34 案例2-2的定义字段

图2.35 案例2-2的添加预定义字段

<5> 运行任务抓取数据。单击“Run Task”下的“Local Extraction”(见图2.36),将任务在本地计算机上运行。运行需要一些时间。

图2.36 案例2-2的运行任务

<6> 导出数据。单击右下角的“Export data”按钮,在出现的菜单中选择导出的数据类型(见图2.37),选择导出数据文件的位置后,即可导出数据。

List or Table采集包含列表和表格两种,见图2.38。

图2.37 案例2-2的数据导出

图2.38 List or Table采集

列表形式是采集的数据呈现类似系列结构的数据时(如京东商城的商品数据)需要采用的形式,其网页源代码通常是<ul>或<ol>,分别代表无序和有序列表。表格形式是列表形式的一个特例,类似常见的Excel表格,数据排列规整。其网页源代码通常是<table>。

【案例2-3】使用“List or Table”采集列表页面。注意案例1仅抓取了第一页的25部影片的数据,本案例可以设置抓取的页数,即可以抓取更多部,直至250部影片数据。

<1> 在“Home”页面单击“Start”按钮,选择“List or Table Extract”(同案例2-2)。

<2> 定义任务(同案例2-2)。

<3> 输入URL地址https://movie.douban.com/top250,单击“Next”按钮(同案例2-2)。

<4> 定义列表。图2.39下部分显示第三步URL页面的内容。选择第一部电影的全部数据,注意,数据四周的点划线边框。上部分显示选择的第1条列表数据。然后再选择第二部电影的全部数据,则上部分自动显示了全部25条列表数据,见图2.40。如果列表不符合自己的要求可以单击“Clear List”按钮删除列表后重新操作,单击“Next”按钮。

<5> 定义字段。列表包含多个字段,从中选择需要抓取的字段,如序号、电影名、导演主演、评分和评价人数等数据,见图2.41,单击“Next”按钮。

图2.39 案例2-3的定义列表1

图2.40 案例2-3的定义列表2

图2.41 案例2-3的定义字段

<6> 定义分页。本案例的250部电影分10页显示,所以选择“Enable pagination”,然后单击页面下部的“后页”,在页面上部可以看到分页链接已经设置好,见图2.42。设置“Implement pagination”为“5”,表示抓取前5页,即125部电影的数据。单击“Next”按钮。

图2.42 案例2-3的定义分页

<7> 运行任务抓取数据。单击“Run Task”下的“Local Extraction”,将任务在本地计算机上运行。

<8> 导出数据。单击右下角的“Export data”按钮,选择导出数据类型和数据文件的位置后,即可导出数据(同案例2-2)。

【案例2-4】用List or Table采集表格页面。

登录京东页面www.jd.com,在搜索框中输入“椅子”,结果是一个典型的表格效果。步骤同案例3,此处不再赘述,见图2.43。

图2.43 案例2-4的定义列表

List and Detail采集是从一个列表数据页面进入到每个列子项的详情数据页面,然后采集详情页面的数据,见图2.44。

图2.44 List and Detail采集

【案例2-5】用List and Detail采集二级页面的数据。

登录页面https://movie.douban.com/top250,单击某部电影的名字,进入其二级页面,如https://movie.douban.com/subject/1292052/,然后抓取二级页面的数据。

<1> 在“Home”页面单击“Start”,选择“List and Detail Extract”。单击“Next”按钮(同案例2-2)。

<2> 定义任务(同案例2-2)。

<3> 输入URL地址(同案例2-2)。

<4> 定义列表。在图2.45的下部分单击第一个链接,即第一部电影的名字,该链接被插入到图2.45的上部分,同样单击第二个链接,则自动将首页的25个链接插入到图2.45的上部分。单击“Next”按钮。

图2.45 案例2-5的定义列表

<5> 定义分页,见图2.46(同案例2-3)。

图2.46 案例2-5的定义分页

<6> 定义字段。在二级页面中选择需要抓取的字段,见图2.47(同案例2-3)。

图2.47 案例2-5的定义字段

<7> 运行任务抓取数据。由于每个页面均要打开二级页面,因此任务运行时间较长(同案例2-2)。

<8> 导出数据(同案例2-2)。

3.Advanced Mode

Advanced Mode(高级模式)是一种进阶模式,虽然功能强大,但是需要一定的HTML基础才能掌握(详见本书第7章)。本书略过此种模式,若有需要,读者可以去官方网站的教程中心[38]学习。