基于R语言的自动数据收集:网络抓取和文本挖掘实用指南【1.1】

张开发
2026/4/7 16:03:08 15 分钟阅读

分享文章

基于R语言的自动数据收集:网络抓取和文本挖掘实用指南【1.1】
1.3 传播、提取和保存网络数据的技术从网络采集数据并不总是像前面的入门例子里描述得那么简单。在数据保存在比HTML表格更复杂的结构里的情况下、在网页是动态生成的情况下或当需要从纯文本中提取信息的时候困难就冒出来了。用R进行自动化的数据采集会涉及一些学习成本这主要意味着你必须掌握一套网络和网络相关技术的基础知识。不过在讲解这些基础工具的内容中我们会尽可能着重于讲解网络抓取和文本挖掘的必要基础知识而忽略掉关系不大的细节。要编写良好的网络抓取程序成为所有网络技术的专家绝不是必需的条件。要用R在网络上进行数据采集有三个技术领域是很重要的。图1-4给出了这三个领域的概况。在本章余下的部分里我们会逐个介绍这些领域并对它们之间的各种联系进行说明。这有助于你在学习本书第一部分的基础知识时保持宏观的视野然后再继续学习本书第二部分即实际的网络抓取任务。图1-4 传播、提取和保存网络数据的技术1.3.1 在网络上传播内容的技术我们涉及的第一个核心内容是在网络上发布内容的技术。数据传播有多种方式但与这个核心内容关联度最高的是XML/HTML、AJAX和JSON图1-4左边的一列。对于在网络上浏览在屏幕之后有个隐藏的标准它定义了信息显示方式的结构这就是“超文本标记语言”HTML。不管我们是在维基百科上查阅资料在Google上搜索站点查看我们的银行账号还是在Twitter、Facebook或YouTube上进行社交使用浏览器就意味着使用HTML。虽然HTML不是一种专用的数据存储格式但它往往包含了我们所感兴趣的信息。我们会在文本、表格、列表、链接或其他结构里寻找数据。遗憾的是数据在浏览器里展示的方式和它们在HTML代码里存放的方式是有差异的。为了从网上自动化采集数据并用R处理它们对HTML及其信息存放方式的基本理解是必不可少的。我们在第2章里会从网络抓取程序的角度对HTML进行介绍。可扩展标记语言XML是最流行的网络数据交换格式。从都是标记语言的方面来看它和HTML算是近亲。不过HTML是用于定义信息的显示而XML的主要用处是存放数据。所以说HTML网页用于给浏览器解析并转化成漂亮的输出效果而XML“仅仅是”用户自定义标签内部的打包数据。用户自定义标签使XML远远比HTML更适合存放数据。近年来XML及其衍生物即所谓的“模式”scheme已经在网络应用的各种数据交换中大行其道。因此当你从网络采集数据时熟悉基本的XML知识是很重要的见第3章。HTML和XML风格的文档都提供了用于存放数据的结构这种结构是自然的通常也是分层的。为了识别和解析这种结构我们就需要能“理解”并充分处理这种语言的软件。必要的工具也就是解析器parser会在第2章和第3章介绍。另一个网络常常用到的标准数据保存和交换格式是“JavaScript对象标记”JSON。类似于XMLJSON也被用于大量互联网应用为Web开发者提供数据。想象一下XML和JSON都是为纯文本数据定义容器的标准。例如如果开发者要分析Twitter上的热点就可以从Twitter设置的一个以JSON格式分发信息的接口来收集必要的数据。之所以数据的分发优先采用XML或JSON格式主要是因为这两种格式兼容了很多编程语言和软件包括R在内。由于数据提供者无法知道后期处理这些信息的会是什么软件合适的方案就是所有参与方都以普遍接受的标准格式来发布数据。JSON的逻辑会在3.2节介绍。AJAX是一组已经紧密集成到现代Web开发工具集中的技术。在让网站能支持从浏览器会话session后台异步请求数据并以动态风格更新其视觉呈现方面AJAX扮演了举足轻重的角色。虽然现代Web应用的复杂精巧要大大归功于AJAX但这些技术对于网络抓取程序就很讨厌了我们用标准的R工具会很快撞进一个死胡同里。第6章会专门讨论JavaScript和XMLHttpRequest这两项关键的技术并讲解用AJAX改进的网站是如何偏离经典的HTML/HTTP逻辑的。我们还会讨论针对这类问题的一个解决办法借助浏览器集成的Web开发者工具在浏览器内部进行更深入的探寻。我们抓取网络信息的时候经常会处理纯文本数据。从某种意义上来说纯文本是每个HTML、XML和JSON文档的一部分。我们希望强调的关键问题是纯文本是非结构化数据至少对逐行读取文本文件的计算机程序来说是这样的。对于纯文本数据本书中没有安排专门的章节进行介绍但第8章给出了有关如何从这类数据中提取信息的指南。为了从网络查找数据我们必须让电脑能够与服务器和Web服务进行通信。Web通信的通用语是超文本传输协议即HTTP。这是客户端和服务器之间最常用的通信标准。实际上我们打开的每个HTML页面、在浏览器上看到的每个图片、观看的每个视频都是通过HTTP传输的。尽管我们一直在使用这个协议但我们大部分人都不会注意到它因为HTTP交换通常是由电脑进行的。我们会从本书中了解到对很多基本的网络抓取应用来说我们不需要关心HTTP协议的细节因为R可以很好地接手大部分的任务。不过在某些情况下我们需要深入该协议内部构造更高级的Web请求来获取所寻找的信息。因此HTTP协议的基本概念是第5章的主题。1.3.2 从Web文档中提取信息的技术要从我们收集的文档中查找信息就需要用到网络数据采集的第二个核心技术内容了。对应于收集文档使用的不同技术有不同的工具适用于从这些来源抽取数据图1-4的中间列。本节会对这些可用的工具进行简介。使用R进行信息提取的一大优势是我们可以在R的环境内部使用这些技术即使某些技术并非R专用而是通过一套组件来实现的。我们手头的第一个工具是XPath查询语言。它是用来从如HTML、XML及其变体如SVG或RSS之类的标记文档中选择特定信息片段的。在一个典型的网络数据抓取任务中要获得结构良好而且整洁的数据集调取网页是一项重要但通常只是中间的步骤。为了充分利用网络这一近乎无穷无尽的数据源的好处一旦相关的网络文档被确定并下载我们还必须进行一系列的过滤和提取步骤。这些步骤的主要目的是把保存在标记文档中的信息重塑为适合用统计软件进行后期处理和分析的格式。这一任务包括确定我们感兴趣的数据并确定它在特定的文档中的位置然后对相应文档定制一个查询来提取我们想要的信息。XPath会被作为执行这些任务的一种选项在第4章进行介绍。相比HTML或XML文档JSON文档更为轻量级也更易于解析。要从JSON中提取数据我们无须使用特定的查询语言依赖R的高级函数就能很好地解码JSON数据。我们会在第3章说明它的用法。从利用AJAX技术生成的网页中提取信息是一个更高级、更复杂的场景。作为从R控制台初始化Web请求的有力替代方案我们要推出Selenium框架把它作为处理网络数据的一种实用方案。Selenium让我们能通过R向浏览器窗口引入一些命令例如鼠标点击或键盘输入。通过在浏览器中直接操作Selenium能够避免一些与采用AJAX技术所生成的网页相关的问题。我们会在9.1.9节的一个数据抓取案例中介绍Selenium。该节会借助一个实际应用来讨论Selenium框架以及R的Web驱动组件。网络抓取的一项核心任务是从大量的文本数据中采集与我们研究的问题相关的信息。我们通常会关心文本数据中的系统性元素特别是在我们需要对结果数据运用量化分析方法的情况下。系统性结构可能是数字或名字如国家或地址。能用来提取信息中的系统性组成部分的一种技术就是正则表达式。本质上说正则表达式就是能够匹配文本中固定并重复出现的模式的一些抽象字符串序列。除了使用它们从纯文本文档中提取内容我们还可以将其应用到HTML和XML文档中来识别并提取我们感兴趣的文档片段。虽然对标记文档来说使用XPath查询往往是更好的方法但是如果需要的信息是藏在最底层的原子级数据中的正则表达式就能起作用了。此外如果相关的信息是分散在整个HTML网页中的某些探索文档结构和标记的方法可能会变得无效。在第8章会详细讲解正则表达式在R中是如何工作的。除了从文本数据中以数字或名字的形式提取有意义的信息我们手头还有第二项技术即文本挖掘text mining。运用这类程序可以让研究者基于所使用词句的相似性来对非结构化文本进行分类。要理解文本挖掘的概念你可以考虑一下字面信息和隐含信息的不同之处。前者描述的是具体关联到特定术语的信息例如一个地址或一种温度计量单位后者则是指不包含在文本内容中的文字标签。例如在分析一组新闻报道时人类读者能够把它们划分到特定的主题类别中如政治、媒体或运动。文本挖掘过程提供了对文本进行自动化分类的解决方案。这在分析网络数据时尤其有用这些网络数据通常是以无标签、非结构化的文本形式出现的。我们会在第10章详细介绍几种这方面现有的技术。1.3.3 数据保存的技术最后网络数据采集的第三个核心技术是处理数据保存的手段图1-4的右列。R通常是非常适合管理数据保存比如数据库技术的。总体而言信息提取技术和数据保存技术之间的关联并不是那么明显。最好的保存数据方法未必和它的来源有关系。如在线购物、浏览图书馆目录、汇款或在超市购买两包糖果这样简单的日常过程都涉及了数据库。我们很少意识到数据库扮演了如此重要的角色这是因为我们并不直接和它们交互——数据库喜欢在幕后工作。对一个项目来说只要数据是关键因素网络管理员就会依靠数据库这是因为数据库具有可靠性、效率、多用户访问、近乎无限的数据容量以及远程访问的能力。对自动化数据采集而言数据库备受关注的原因有两个一是我们偶尔可能会被授权直接访问数据库所以应该为此做好准备二是虽然R有很多数据管理工具但有时可能把数据保存到数据库里比保存在某种本地文件格式里要好。例如如果你在从事一个项目项目里的数据需要做成能在线访问的或者你有多个合作方他们各自为你搜集特定的一部分数据一套数据库就能提供必要的基础架构。此外如果你需要采集的数据量很大而且经常给数据分组并进行操作设置一套数据库也是靠谱的做法因为对它们进行查询的速度就会很快。对于数据库的很多优势我们会在第7章介绍并把SQL作为主要的数据库访问和通信语言进行讨论。不过在很多情况下普通的R数据保存技术就够用了例如用二进制或纯文本格式导入和导出数据。在第11章我们会讲解网络抓取总体工作流程的一些细节问题包括数据管理任务。1.4 本书的结构我们在写这本书的时候心里一直想着广泛的各种读者需求。人各有志加上使用R的经验也不同你既可以从封面一直读到封底也可以单独选择对完成手头工作有用的一个小节。·如果你具备R的基本知识但不熟悉任何网络常用的脚本语言你就可以按部就班地跟着本书学习。·如果你已经有了一些文本数据并需要从中提取信息你可以从第8章介绍正则表达式和基本字符串函数开始再加上第10章介绍统计性文本处理。·如果你主要对网络抓取技术感兴趣但抓取文本数据除外你应该可以整个跳过第10章。不管是哪种情况我们都推荐阅读第8章因为文本操作的基本技术也是网络抓取的基础。·如果你是一位教师你应该可以把本书作为基础或补充教材。为此我们在第一部分和第二部分的大部分章节之后都提供了一套练习题。在本书的官网www.r-datacollection.com上有一半左右练习题的参考答案这样你就可以用它们布置作业或作为考试题。对于所有其他读者我们希望你也能发现本书的结构是有所帮助的。下面就是本书三个部分的简单概述。在第一部分我们会介绍在互联网上通信、交换、保存和显示信息的基础技术HTTP、HTML、XML、JSON、AJAX、SQL并讲解用于查询网络文档和数据集的基本技术XPath和正则表达式。这些基础技术对于那些还不熟悉网络架构的读者尤其有用如果你已经有一些这方面的知识用它温故知新也是可以的。本书第一部分明确着重介绍数据提取相关的基本概念本书其他部分都会用到它们并提供大量的练习让读者快速适应这些技术。本书第二部分由三个核心章节组成。第一个核心章节讲解了多种网络抓取技术即正则表达式的使用、XPath、各类API接口、其他数据类型以及开源社区相关的技术。我们展示了一组常见场景并针对这些任务运用了流行的R组件。我们还会讨论网络抓取的法律层面的问题并针对如何在网络上行为得体给出了忠告。第二个核心章节是用于统计性文本处理的技术。数据常常是以文本的形式获得的需要进一步解析才能适用于后续分析。我们会讲解统计性文本处理的两种主要方法监督与非监督文本分类的多种实现技术并演示隐式信息是如何提取出来的。在第三个核心章节我们会给出关于用R管理数据的项目中常见问题的一些见解。我们会讨论如何利用文件系统如何利用循环提高编程效率如何组织网络抓取过程以及如何安排定期执行的抓取任务。在本书第三部分我们会提供一组应用把第一部分和第二部分所介绍的技术进行实际运用。每个案例分析的开头是相关分析内容的简短需求和目标。相比之前的技术型章节该部分的案例分析会深入更多细节中并讨论更广泛的一些问题。另外这些案例分析还会针对日常的数据抓取和文本处理的工作流程、真实环境数据中的陷阱以及规避它们的方法等问题提供一些实用的见解。这部分还包含了案例分析内容的一览表其中包括从网络或文本中提取数据用到的关键技术的视图以及这些任务会用到的关键组件和函数。第一部分 网络和数据技术入门第2章 HTML第3章 XML和JSON第4章 XPath第5章 HTTP第6章 AJAX第7章 SQL和关系型数据库第8章 正则表达式和基本字符串函数

更多文章