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

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

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

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函数创建数据映射,并将输出转换至数据集中。

时间: 2024-09-15 10:15:49

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

《Clojure数据分析秘笈》——1.12节整合不同格式的数据

1.12 整合不同格式的数据如果能够从多种链接数据源整合数据,这样的作用很大,但是多数数据格式不适用于语义网.幸好链接数据灵活动态的数据模型有助于整合多源数据.在本方法中将结合前面的一些工作.从RDF中读入货币数据(与1.10节中相同),并从X-Rates(http://www.x-rates.com)网页表中信息抓取汇率数据(与1.8节中相同).最后,将所有数据存入三元组存储中并再将其取出使用(与1.11节中相同).

《Clojure数据分析秘笈》——3.5节将agent和STM结合使用

3.5 将agent和STM结合使用agent本身非常实用.但是如果agent函数需要与agent外部数据保持一致性,需要将agent和STM结合使用:使用send或send-off函数协调agent的状态,将dosync.ref-set.alter或者commute整合至agent函数来协调其他状态.结合使用简化了状态和数据的一致性问题.这对于管理数据处理和分析系统复杂度提供了极大的帮助.本方法中,还是处理前几个方法中的问题:在2010年美国人口普查数据中计算Virginia每个住宅单元的家庭

《Clojure数据分析秘笈》——3.1节引言

第3章 使用并发编程管理复杂度3.1 引言 设计和创建一个计算机系统是一个均衡行为:不断地添加特性和功能并保持代码简单和系统性能合理.数据分析系统也是如此.事实上,数据分析系统问题更糟糕.通常而言,数据只是部分一致,在开始分析之前需要采取多种策略来抽取有用数据. 这会导致问题失控. Clojure有一系列可以帮助管理系统复杂性的工具.这些最强大的工具之一是并发编程.这使得可以使用另外一种方式设计程序.与之前一段代码做很多事情并且有非常直接.紧密的依赖关系不同,可以通过将许多完成不同功能的独立模块

《Clojure数据分析秘笈》——1.3节将CSV数据读入Incanter数据集

1.3 将CSV数据读入Incanter数据集 以逗号分隔值(CSV)是最简单的数据格式之一,并且这种数据格式应用非常普遍.Excel可以直接读写CSV文件,而且多数数据库也可以.由于CSV文件就是无格式的文本,因此使用任何编程语言都很容易生成或者访问它.1.3.1 准备工作 首先,确保加载了正确的库.Leiningen(https://github.com/technomancy/leiningen)的项目文件project.clj file应该包含以下依赖(也可以使用更新的版本): 这个文件

《Clojure数据分析秘笈》——1.7节将XML数据读入Incanter数据集

1.7 将XML数据读入Incanter数据集 一类非常常用的数据格式是XML,人们对其褒贬不一.但在某种情况下,几乎所有人都不得不处理它.Clojure可以使用Java的XML库,但它也有自己的包,这个包提供了一种在Clojure中使用XML的更自然的方式. 1.7.1 准备工作 首先,在Leiningen project.clj文件中引入以下依赖: 1.7.3 实现原理 本方法按以下顺序处理XML: 1. 解析XML数据文件. 2. 利用解析树抽取数据节点. 3. 将节点转换成代表数据的映射

《Clojure数据分析秘笈》——1.1节引言

第1章导入分析数据1.1 引言如果没有大量数据是无法进行数据分析的,因此任何项目的第一步都是评估有什么样的数据和需要什么样的数据.一旦知道需要什么样的数据,就要想办法得到它.本章和本书中的许多方法使用Incanter(http://incanter.org/)导入数据并规定使用Incanter数据集.Incanter是Clojure中完成统计分析和图形化显示的库,其作用类似于R.Incanter可能并不适用于所有任务(后面将使用Weka库进行聚类和机器学习),但它仍是在Clojure中进行数据分

《Clojure数据分析秘笈》——2.2节使用正则表达式清洗数据

2.2 使用正则表达式清洗数据大概最基本.最普遍的数据清洗方式就是正则表达式了.尽管有时被滥用,但是很多时候正则表达式是完成一项工作最适合的工具.而且,Clojure内置编译正则表达式的语法,因此在Clojure中使用正则表达式也很方便.本例将编写一个标准化美国电话号码的函数. 2.2.1 准备工作本方法需要在脚本或REPL中使用clojure.string库.表达式如下: 2.2.3 实现原理本方法中最复杂的部分是正则表达式,接下来对其详细讲解.(?x):这是本身并不匹配任何内容的标识符.它允

《Clojure数据分析秘笈》——1.4节将JSON数据读入Incanter数据集

1.4 将JSON数据读入Incanter数据集 另一个越来越流行的数据格式是JavaScript Object Notation(JSON,详见http://json.org/).与CSV相似,JSON也是无格式的文本,因此程序容易处理.它提供了相对于CSV文件关于数据的更多信息,但是代价是更冗长.JSON格式允许用更复杂的方式使数据结构化,例如层次结构或者序列层次结构. 由于JSON是比CSV更完善的数据模型,因此使用时可能需要转换数据.在这种情况下,可以将感兴趣的信息取出,在传入Incan

《Clojure数据分析秘笈》——2.10节修正拼写错误

2.10 修正拼写错误 拼写错误是某些时间需要处理的问题.特别是当你试图处理原始的文本数据时,拼写错误会对你的工作造成较大影响. 曾几何时,拼写检查器是进行多种优化的软件的重要部分,这些软件被限制运行于日常工作计算机环境下.现在情况不是这样了.Peter Novig在互联网上发布了一篇名为"如何编写拼写检查器程序"(http://norvig.com/spell-correct.html)的文章.它展示了如何读入被假定为拼写无误的文本并根据这些文本构建拼写检查器.他提供了一个使用Pyt