《Clojure数据分析秘笈》——1.9节从网页中抓取文本数据

本节书摘来自华章社区《Clojure数据分析秘笈》一书中的第1章,第1.9节从网页中抓取文本数据,作者(美)Eric Rochester,更多章节内容可以访问云栖社区“华章社区”公众号查看

1.9 从网页中抓取文本数据
网页中的数据并不全都存在表中。一般而言,获取非表格式的数据会更为复杂,而且取决于网页的结构。

1.9.1 准备工作
首先,使用与上一种方法中相同的依赖和require声明。
接下来,确定需要抓取数据的网页文件。上传一个文件至http://www.ericrochester.com/clj-data-analysis/data/small-sample-list.html
这是一个更接近于现代的网页示例。在这个网页中,使用section和article标签以及HTML5的其他特征标注文本,而没有使用表。


ea966fd583dba5d3d79c0bea85981f545ec938aa


ecf9a59ab39dbdf450b3bc9a1a8aa67851437f18

1.9.3 实现原理
查看过网页后发现每个家庭(family)都由一个带有h2标签的头的article标签包装。get-family函数将标签取出并返回文本。
get-person处理每个人(person)的信息。每个家庭的成员存于一个无序列表(ul)中,每个人(person)都在一个li标签中。人的姓名本身在一个em标签中。let语句将li标签的内容取出并按顺序将其分解,进而将姓名和关系字符串取出。get-person函数将两部分信息都放入映射中并返回该映射。
get-rows处理每个article标签。它调用get-familiy来取得头里面的信息,取得每个人(person)的列表项,并在列表项内容上调用get-person函数,将家庭(family)信息加入每个人(person)的映射中。
下面是对应处理HTML结构的函数。每个函数列在它解析的内容旁边。
最后,load-data通过下载并解析HTML文件并从中取出article标签将整个过程整合起来。然后调用get-rows函数创建数据映射,并将输出转换至数据集中。


c4da1ca75903e8f689b8c27873639a01d96f82ee
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值