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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

本节书摘来自华章计算机《数据科学: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

相关文章
|
2月前
|
监控 安全 网络安全
云计算与网络安全:保护数据的关键策略
【9月更文挑战第34天】在数字化时代,云计算已成为企业和个人存储、处理数据的优选方式。然而,随着云服务的普及,网络安全问题也日益凸显。本文将探讨云计算环境中的网络安全挑战,并提供一系列策略来加强信息安全。从基础的数据加密到复杂的访问控制机制,我们将一探究竟如何在享受云服务便利的同时,确保数据的安全性和隐私性不被侵犯。
70 10
|
3月前
|
存储 安全 网络安全
云计算与网络安全:守护数据,构筑未来
在当今的信息化时代,云计算已成为推动技术革新的重要力量。然而,随之而来的网络安全问题也日益凸显。本文从云服务、网络安全和信息安全等技术领域展开,探讨了云计算在为生活带来便捷的同时,如何通过技术创新和策略实施来确保网络环境的安全性和数据的保密性。
|
1月前
|
安全 算法 网络安全
量子计算与网络安全:保护数据的新方法
量子计算的崛起为网络安全带来了新的挑战和机遇。本文介绍了量子计算的基本原理,重点探讨了量子加密技术,如量子密钥分发(QKD)和量子签名,这些技术利用量子物理的特性,提供更高的安全性和可扩展性。未来,量子加密将在金融、政府通信等领域发挥重要作用,但仍需克服量子硬件不稳定性和算法优化等挑战。
|
1月前
|
存储 安全 网络安全
云计算与网络安全:保护数据的新策略
【10月更文挑战第28天】随着云计算的广泛应用,网络安全问题日益突出。本文将深入探讨云计算环境下的网络安全挑战,并提出有效的安全策略和措施。我们将分析云服务中的安全风险,探讨如何通过技术和管理措施来提升信息安全水平,包括加密技术、访问控制、安全审计等。此外,文章还将分享一些实用的代码示例,帮助读者更好地理解和应用这些安全策略。
|
27天前
|
弹性计算 安全 容灾
阿里云DTS踩坑经验分享系列|使用VPC数据通道解决网络冲突问题
阿里云DTS作为数据世界高速传输通道的建造者,每周为您分享一个避坑技巧,助力数据之旅更加快捷、便利、安全。本文介绍如何使用VPC数据通道解决网络冲突问题。
86 0
|
1月前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:从漏洞到加密,保护数据的关键步骤
【10月更文挑战第24天】在数字化时代,网络安全和信息安全是维护个人隐私和企业资产的前线防线。本文将探讨网络安全中的常见漏洞、加密技术的重要性以及如何通过提高安全意识来防范潜在的网络威胁。我们将深入理解网络安全的基本概念,学习如何识别和应对安全威胁,并掌握保护信息不被非法访问的策略。无论你是IT专业人士还是日常互联网用户,这篇文章都将为你提供宝贵的知识和技能,帮助你在网络世界中更安全地航行。
|
2月前
|
存储 安全 网络安全
云计算与网络安全:如何保护您的数据
【10月更文挑战第21天】在这篇文章中,我们将探讨云计算和网络安全的关系。随着云计算的普及,网络安全问题日益突出。我们将介绍云服务的基本概念,以及如何通过网络安全措施来保护您的数据。最后,我们将提供一些代码示例,帮助您更好地理解这些概念。
|
3月前
|
数据采集 存储 监控
网络爬虫的最佳实践:结合 set_time_limit() 与 setTrafficLimit() 抓取云盘数据
本文探讨了如何利用 PHP 的 `set_time_limit()` 与爬虫工具的 `setTrafficLimit()` 方法,结合多线程和代理 IP 技术,高效稳定地抓取百度云盘的公开资源。通过设置脚本执行时间和流量限制,使用多线程提高抓取效率,并通过代理 IP 防止 IP 封禁,确保长时间稳定运行。文章还提供了示例代码,展示了如何具体实现这一过程,并加入了数据分类统计功能以监控抓取效果。
74 16
网络爬虫的最佳实践:结合 set_time_limit() 与 setTrafficLimit() 抓取云盘数据
|
2月前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
69 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
2月前
|
SQL 安全 测试技术
网络安全与信息安全:保护数据的艺术
【9月更文挑战第36天】在数字化时代,网络安全和信息安全已成为维护个人隐私和企业资产的基石。本文深入探讨了网络安全漏洞、加密技术以及安全意识的重要性,旨在为读者提供一份知识宝典,帮助他们在网络世界中航行而不触礁。我们将从网络安全的基本概念出发,逐步深入到复杂的加密算法,最后强调培养安全意识的必要性。无论你是IT专业人士还是日常互联网用户,这篇文章都将为你打开一扇了解和实践网络安全的大门。
46 2