《数据科学:R语言实现》——2.7 爬取网络数据

简介:

本节书摘来自华章计算机《数据科学:R语言实现》一书中的第2章,第2.7节,作者 丘祐玮(David Chiu),更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.7 爬取网络数据

在多数情况下,数据并不会存在于数据库中,相反它们以各种形式遍布于互联网上。为了从这些数据源中挖掘更有价值的信息,我们需要知道如何在网络上访问和爬取数据。这里,我们会介绍如何使用rvest程序包从http://www.bloomberg.com/ 上收集财经数据。

准备工作

在本教程中,你需要给开发环境安装R,同时确保计算机可以访问互联网。

实现步骤

执行下列步骤,从http://www.bloomberg.com/ 爬取数据。

1.首先,访问下列链接,浏览彭博商业上的标普500指标:http://www.bloomberg.com/quote/SPX:IND

image

2.页面出现后,如图9所示。我们可以安装加载rvest程序包:
image

3.你可以使用rvest程序包中的函数HTML爬取和解析 http://www.bloomberg.com/ 中指向标普500指数的HTML网页:
image

4.使用浏览器的内置网页查看器,查看下列指标图中的具体报价位置(如图10中用红框标记):

image

5.你可以移动鼠标查看具体报价,单击希望爬取的目标元素。如图11所示,

部分包含所有所需的信息:

image

6.使用函数html_nodes抽取cell类中的元素:
image

7.另外,我们可以使用cell__label类中的元素解析具体报价的标签,从爬取的HTML中抽取文本,并清理抽取文本中的空格和换行符:
image

8.而且,我们可以使用cell__value类中的元素抽取具体报价的值,从爬取的HTML中抽取文本,同样清理空格和换行符:
image

9.最后我们可以设定抽取的label作为value的名称:
image

10.接着,我们可以通过下列链接,访问能源和石油市场指数页面,如图12所示。(http://www.bloomberg.com/energy

image

11.然后我们使用网页查看器查看表元素的位置,如图13所示。

12.我们可以使用html_table,通过data-table类抽取表元素:

image

image

运行原理

从网站上爬取数据最困难的是数据使用不同的格式进行发布和结构化。在开展工作之前,你需要完全理解数据在HTML中是如何结构化的。

由于HTML(Hypertext Markup Language,超文本标记语言)拥有和XML类似的语法,我们可以使用XML程序来读取和解析HTML网页。但是,XML程序包只提供了XPath方法。它有如下两个缺点:

image

由于这些原因,在解析HTML的时候,我们推荐使用CSS选择器,而不是XPath。

Python用户可能对如何使用请求和BeautifulSoup程序包快速爬取数据比较熟悉。rvest程序包就是R中用来实现类似功能的。它提供了简单有效的从HTML网页收集数据的能力。

在本教程中,我们的目的是从 http://www.bloomberg.com/ 爬取标准普尔500财经数据的具体报价。第一步是保证我们可以通过互联网访问目标网页。我们需要安装和加载rvest程序包。安装和加载完成之后,我们可以使用HTML函数读取网页的源代码spx_quote。

确保我们可以读取HTML网页后,我们就可以开始解析HTML网页上的具体报价。但是,我们首先需要查看具体报价的CSS路径。有多种方法查看一个具体元素的CSS路径。最常用的方法是使用每一个浏览器内置的开发工具(按F12键或者FN+F12组合键来查看CSS路径。以谷歌的Chrome浏览器为例,你可以按下F12键打开开发工具。开发工具的窗口会展示在可视区域内(请参阅下列文档链接https://developer.chrome.com/devtools/docs/domand-styles#inspecting-elements)。

然后,你可以把光标移动到DevTools窗口的左上部分,选取Inspect Element图标(类似放大镜的符号)。接着,单击目标元素,DevTools窗口会对选取区域的源代码进行高亮显示。你可以把光标移动到高亮区域,并右击。从弹出菜单中,单击Copy CSS Path抽取CSS路径。你也可以使用cell类,查看源代码,并观察选取的元素是如何在HTML代码中结构化的。

rvest的一个优点是它在设计之初就与magrittr兼容。因此我们可以使用管道操作符%>%把每个阶段的输出连接起来。 我们可以首先调用spx_quote获取输出源,然后把输出传给html_nodes。由于函数html_nodes使用CSS选择器来解析元素,因此函数会使用基础的,带有类型(例如div)、ID(例如#header)和类(例如.cell)的选择器 。由于待抽取的元素拥有cell类,因此你应该在cell前放置一个点号(.)。

最后,我们应该从之前解析的节点中抽取标签和值。这里,我们首先抽取cell__label类中的元素,然后使用html_text抽取文本。我们可以使用函数gsub清理文本中的空格和换行符。类似地,我们使用同样的方法来抽取class__value的元素。因为我们从具体的报价中抽取了标签和值,我们就可以使用标签作为值的名称。现在我们已经把网络数据组织在了结构化的数据中。

我们也可以使用rvest采集表格数据。与标普500指数数据采集的过程类似,我们可以首先访问能源和石油市场指数网页,然后使用网络元素查看器找到表格数据元素位置。由于我们已经找到了data-table类中的元素,我们可以使用函数html_table来读取表格内容,并传给一个数据框。

更多技能

除了使用浏览器内置的网页查看器,我们也可以考虑使用SelectorGadget(http://selectorgadget.com/ ) 来查找CSS路径。SelectorGadget是一个强大而且易用的谷歌Chrome扩展,它允许用户只需单击几次就抽取出目标元素的CSS路径。

1.为了使用SelectorGadget,访问下列链接:https://chrome.google.com/webstore/detail/selectorgadget/mhjhnkcfbdhnjickkkdbjoemdmbfginb 。然后,单击绿色按钮(图14中的红框)给Chrome安装插件:

image

2.单击右上角图标打开SelectorGadget,选取需要爬取的区域。被选区域会变成绿色,如图15所示。这个工具会展示区域的CSS路径,以及与路径匹配的元素数目:

image

3.你可以粘贴抽取的CSS路径给html_nodes,作为输入参数来解析数据。

除了rvest,你也可以使用Rselenium连接R和Selenium ,来爬取网页。Selenium最初是支持用户给浏览器发送命令的,并通过脚本自动执行过程的一个网络应用。但是,你也可以使用Selenium来爬取互联网上的数据。下面的介绍展示了使用Rselenium爬取 http://www.bloomberg.com/ 的过程。

1.首先,访问下列链接,下载Selenium单机服务器(http://www.seleniumhq.org/download/)。

image

2.然后,使用下列命令启动Selenium单机服务器:
image

3.如果你成功地启动了Selenium单机服务器,你应该看到下列信息,如图17所示。它意味着你可以通过端口4444连接服务器了:

image

4.现在,你可以使用下列命令安装加载RSelenium:
image

5.安装RSelenium之后,注册驱动并连接Selenium服务器:
image

6.查看服务器的状态:
image

7.然后,我们换到http://www.bloomberg.com/
image

8.最后,我们可以使用CSS选取器爬取数据:
image

相关文章
|
4天前
|
Java Linux API
统计android设备的网络数据使用量
统计android设备的网络数据使用量
16 0
|
1天前
|
安全 网络协议 算法
网络安全与信息安全:保护你的数据,保护你的世界
【5月更文挑战第18天】在数字化的世界中,网络安全和信息安全已经成为我们生活的重要组成部分。本文将深入探讨网络安全漏洞、加密技术以及安全意识等方面的内容,帮助读者更好地理解和保护自己的数据。我们将讨论如何识别和防止网络安全威胁,如何使用加密技术来保护信息,以及如何提高自己的安全意识。
|
2天前
|
机器学习/深度学习 人工智能 安全
网络安全与信息安全:保护数据的关键策略
【5月更文挑战第17天】在数字化时代,网络安全和信息安全已成为维护个人和企业资产的核心。本文将深入探讨网络安全漏洞的概念、加密技术的重要性以及提升安全意识的必要性。我们将分析当前网络环境中的安全挑战,介绍最新的加密方法,并分享如何培养强大的安全文化,以减少潜在的网络攻击和数据泄露风险。
|
4天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:保护您的数据和隐私
【5月更文挑战第14天】本文将探讨网络安全漏洞、加密技术和安全意识等方面,以帮助读者更好地了解如何保护他们的数据和隐私。我们将讨论各种类型的网络攻击,以及如何使用加密技术来保护信息。此外,我们还将强调培养良好的安全习惯的重要性,以降低遭受网络攻击的风险。
|
4天前
|
安全 网络协议 网络安全
网络安全与信息安全:保护你的数据,保护你的未来
【5月更文挑战第14天】在数字化的世界中,网络安全和信息安全是每个互联网用户都必须面对的问题。本文将深入探讨网络安全漏洞、加密技术以及安全意识等方面的知识,帮助读者更好地理解和保护自己的数据。我们将讨论如何识别和防范网络安全威胁,如何使用加密技术来保护数据,以及如何提高自己的安全意识,从而在网络世界中更安全地生活。
|
4天前
|
安全 物联网 网络安全
网络安全与信息安全:保护数据的关键策略
【5月更文挑战第14天】 在数字化时代,网络安全和信息安全已成为维护个人隐私、企业资产和国家安全的基石。面对日益增长的网络威胁,理解并应对安全漏洞、掌握加密技术以及提升安全意识显得尤为重要。本文将深入探讨当前的网络安全隐患,解析加密技术的工作原理及其重要性,并提出提高个人和组织安全意识的有效方法。我们的目标是通过知识分享,为读者提供一套全面的网络安全自保策略。
|
4天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:保护你的数据,保护你的未来
【5月更文挑战第14天】在数字化的世界中,网络安全和信息安全是我们生活的基石。本文将深入探讨网络安全漏洞、加密技术以及安全意识等方面,以期帮助读者更好地理解和应对网络安全威胁。我们将从网络安全的基本概念出发,分析常见的网络攻击手段,然后介绍加密技术的基本原理和应用。最后,我们将讨论如何提高个人和企业的安全意识,以应对日益严峻的网络安全形势。
|
4天前
|
网络安全 数据安全/隐私保护 计算机视觉
2024蓝桥杯网络安全-图片隐写-缺失的数据(0基础也能学会-含代码解释)
2024蓝桥杯网络安全-图片隐写-缺失的数据(0基础也能学会-含代码解释)
|
4天前
|
安全 算法 网络安全
网络安全与信息安全:保护你的数据,保护你的世界
【5月更文挑战第12天】在数字化的世界中,网络安全和信息安全已经成为我们生活的重要组成部分。本文将深入探讨网络安全漏洞、加密技术以及安全意识等方面的问题,帮助读者更好地理解和保护自己的数据。我们将讨论如何识别和防止网络安全威胁,如何使用加密技术来保护信息,以及如何提高自己的安全意识,从而在网络世界中更安全地生活。
|
4天前
|
Web App开发 数据可视化 数据挖掘
利用R语言进行聚类分析实战(数据+代码+可视化+详细分析)
利用R语言进行聚类分析实战(数据+代码+可视化+详细分析)

热门文章

最新文章