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

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

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

2.7 爬取网络数据

在多数情况下,数据并不会存在于数据库中,相反它们以各种形式遍布于互联网上。为了从这些数据源中挖掘更有价值的信息,我们需要知道如何在网络上访问和爬取数据。这里,我们会介绍如何使用rvest程序包从http://www.bloomberg.com/上收集财经数据。
准备工作
在本教程中,你需要给开发环境安装R,同时确保计算机可以访问互联网。
实现步骤
执行下列步骤,从http://www.bloomberg.com/爬取数据。
1.首先,访问下列链接,浏览彭博商业上的标普500指标:http://www.bloomberg.com/quote/SPX:IND

screenshot

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

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

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

screenshot

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

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

screenshot

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

screenshot

11.然后我们使用网页查看器查看表元素的位置,如图13所示。
12.我们可以使用html_table,通过data-table类抽取表元素:
screenshot

运行原理
从网站上爬取数据最困难的是数据使用不同的格式进行发布和结构化。在开展工作之前,你需要完全理解数据在HTML中是如何结构化的。
由于HTML(Hypertext Markup Language,超文本标记语言)拥有和XML类似的语法,我们可以使用XML程序来读取和解析HTML网页。但是,XML程序包只提供了XPath方法。它有如下两个缺点:
不同浏览器上行为不一致。
读取和维护都很困难。
由于这些原因,在解析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安装插件:
screenshot

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

screenshot

3.你可以粘贴抽取的CSS路径给html_nodes,作为输入参数来解析数据。
除了rvest,你也可以使用Rselenium连接R和Selenium ,来爬取网页。Selenium最初是支持用户给浏览器发送命令的,并通过脚本自动执行过程的一个网络应用。但是,你也可以使用Selenium来爬取互联网上的数据。下面的介绍展示了使用Rselenium爬取 http://www.bloomberg.com/ 的过程。
1.首先,访问下列链接,下载Selenium单机服务器(http://www.seleniumhq.org/download/)。

screenshot

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

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

screenshot

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

目录
打赏
0
0
0
0
1408
分享
相关文章
网络通讯技术:HTTP POST协议用于发送本地压缩数据到服务器的方案。
总的来说,无论你是一名网络开发者,还是普通的IT工作人员,理解并掌握POST方法的运用是非常有价值的。它就像一艘快速,稳定,安全的大船,始终为我们在网络海洋中的冒险提供了可靠的支持。
36 22
VB6网络通信软件上位机开发,TCP网络通信,读写数据并处理,完整源码下载
本文介绍使用VB6开发网络通信上位机客户端程序,涵盖Winsock控件的引入与使用,包括连接服务端、发送数据(如通过`Winsock1.SendData`方法)及接收数据(利用`Winsock1_DataArrival`事件)。代码实现TCP网络通信,可读写并处理16进制数据,适用于自动化和工业控制领域。提供完整源码下载,适合学习VB6网络程序开发。 下载链接:[完整源码](http://xzios.cn:86/WJGL/DownLoadDetial?Id=20)
40 12
云计算与网络安全:保护数据的关键策略
【9月更文挑战第34天】在数字化时代,云计算已成为企业和个人存储、处理数据的优选方式。然而,随着云服务的普及,网络安全问题也日益凸显。本文将探讨云计算环境中的网络安全挑战,并提供一系列策略来加强信息安全。从基础的数据加密到复杂的访问控制机制,我们将一探究竟如何在享受云服务便利的同时,确保数据的安全性和隐私性不被侵犯。
86 10
云计算与网络安全:守护数据,构筑未来
在当今的信息化时代,云计算已成为推动技术革新的重要力量。然而,随之而来的网络安全问题也日益凸显。本文从云服务、网络安全和信息安全等技术领域展开,探讨了云计算在为生活带来便捷的同时,如何通过技术创新和策略实施来确保网络环境的安全性和数据的保密性。
微信小程序网络请求与API调用:实现数据交互
本文深入探讨了微信小程序的网络请求与API调用,涵盖`wx.request`的基本用法、常见场景(如获取数据、提交表单、上传和下载文件)及注意事项(如域名配置、HTTPS协议、超时设置和并发限制)。通过一个简单案例,演示了如何实现小程序与服务器的数据交互。掌握这些技能将帮助你构建功能更丰富的应用。
uniapp-网络数据请求全教程
这篇文档介绍了如何在uni-app项目中使用第三方包发起网络请求
128 3
量子计算与网络安全:保护数据的新方法
量子计算的崛起为网络安全带来了新的挑战和机遇。本文介绍了量子计算的基本原理,重点探讨了量子加密技术,如量子密钥分发(QKD)和量子签名,这些技术利用量子物理的特性,提供更高的安全性和可扩展性。未来,量子加密将在金融、政府通信等领域发挥重要作用,但仍需克服量子硬件不稳定性和算法优化等挑战。
云计算与网络安全:保护数据的新策略
【10月更文挑战第28天】随着云计算的广泛应用,网络安全问题日益突出。本文将深入探讨云计算环境下的网络安全挑战,并提出有效的安全策略和措施。我们将分析云服务中的安全风险,探讨如何通过技术和管理措施来提升信息安全水平,包括加密技术、访问控制、安全审计等。此外,文章还将分享一些实用的代码示例,帮助读者更好地理解和应用这些安全策略。
网络安全与信息安全:从漏洞到加密,保护数据的关键步骤
【10月更文挑战第24天】在数字化时代,网络安全和信息安全是维护个人隐私和企业资产的前线防线。本文将探讨网络安全中的常见漏洞、加密技术的重要性以及如何通过提高安全意识来防范潜在的网络威胁。我们将深入理解网络安全的基本概念,学习如何识别和应对安全威胁,并掌握保护信息不被非法访问的策略。无论你是IT专业人士还是日常互联网用户,这篇文章都将为你提供宝贵的知识和技能,帮助你在网络世界中更安全地航行。