文章采集api(如何用R调用API,提取和整理你需要的免费Web数据)
优采云 发布时间: 2021-09-09 22:13文章采集api(如何用R调用API,提取和整理你需要的免费Web数据)
API 是获取网络数据的重要途径之一。您想知道如何使用R调用API来提取和组织您需要的免费网络数据吗?本文将一步步为您详细介绍操作流程。
权衡
俗话说,“聪明的女人做饭没有米饭很难。”就算你掌握了数据分析的18个武功,没有数据也是一件苦恼的事情。 “拔剑望心”大概就是这种情况吧。
数据来源很多。 Web数据是一种数量大、获取相对容易的类型。更好的是,很多网络数据都是免费的。
在这个大数据时代,如何获取网络数据?
许多人会使用其他人编译和发布的数据集。
他们很幸运,他们的工作可以建立在其他人的基础上。这是最有效的。
但并不是每个人都这么幸运。如果你需要没有人编译和发布的数据怎么办?
其实这样的数据量更大。我们是否对他们视而不见?
如果您想到爬虫,那么您的思考方向是正确的。爬虫可以为您获取几乎所有可见(甚至不可见)的 Web 数据。但是,编写和使用爬虫的成本很高。包括时间资源、技术能力等。如果你面对任何网络数据采集问题,你甚至都不会想到“大锤”,有时可能就是“大锤杀鸡”。
在“别人准备的数据”和“需要自己爬取的数据”之间,有一个非常广阔的领域。这就是 API 的世界。
API 是什么?
是Application Programming Interface的缩写。具体来说,就是某个网站积累了变化的数据。如果把这些数据整理出来,不仅费时,而且占用空间,刚整理出来就有过期的危险。大多数人需要的数据其实只是其中的一小部分,但对时效性的要求可能非常强。因此,组织存储并提供给公众下载既不经济也不划算。
但是,如果数据不能以某种方式发布,你将面临无数爬虫的骚扰。这会给网站的正常运行带来很大的麻烦。妥协是网站主动提供了一个渠道。当你需要某部分数据时,虽然没有现成的数据集,你只需要用这个渠道描述你想要的数据,然后网站review(一般是自动化的,瞬间完成),认为可以给你,立即发送你明确要求的数据。双方都很开心。
以后找数据的时候,不妨看看目标网站是否提供了API,避免做无用功。
在这个github项目中,有一个非常详细的列表,涵盖了当前常见的主流网站API资源状态。作者还在整理修改中,大家可以采集慢慢看。
如果我们了解到某个网站提供了API,并且通过查看文档,知道里面有我们需要的数据,那么问题就变成了——如何通过API获取数据?
下面我们通过一个实际的例子向您展示整个过程的步骤。
来源
我们正在寻找的样本是维基百科。
有关维基百科 API 的概述,请参阅此页面。
假设我们关心特定时间段内对指定维基百科文章页面的访问次数。
维基百科专门为我们提供了一种称为指标的数据,它涵盖了页面访问的关键价值。对应的API介绍页面在这里。
页面上有一个示例。假设你需要获取2015年10月爱因斯坦的入口页面的访问次数,可以这样调用:
GET http://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/en.wikipedia/all-access/all-agents/Albert_Einstein/daily/2015100100/2015103100
我们可以在浏览器的地址栏中输入GET后的一长串网址,按回车查看得到的结果。
在浏览器中,我们看到上图中的一长串文本。你可能会觉得奇怪——这是什么?
恭喜,这是我们需要获取的数据。但是,它使用一种称为 JSON 的特殊数据格式。
JSON 是目前互联网上数据交互的主流格式之一。如果你想了解JSON的含义和用法,可以参考这个教程。
在浏览器中,我们最初只能看到数据的第一部分。但它已经收录了有价值的内容:
{"items":[{"project":"en.wikipedia","article":"Albert_Einstein","granularity":"daily","timestamp":"2015100100","access":"all-access","agent":"all-agents","views":18860}
在这一段中,我们看到了项目名称(en.wikipedia)、文章title(阿尔伯特·爱因斯坦)、统计粒度(天)、时间戳(2015 年 10 月 1 日)、访问类型(全部)、终端类型( all),以及访问次数(18860)。
我们使用滑块将返回的文本拖到最后,我们会看到如下信息:
{"project":"en.wikipedia","article":"Albert_Einstein","granularity":"daily","timestamp":"2015103100","access":"all-access","agent":"all-agents","views":16380}]}
与10月1日的数据相比,只有时间戳(2015年10月31日)和访问量(16380))发生了变化。
我们中间跳过的数据是10月2日到10月30日之间的数据。存储格式相同,只有date和visits这两个数据值在变化。
所有需要的数据都在这里,你只需要提取相应的信息,就是这样。但是如果让你手动去做(比如复制需要的项目,然后粘贴到Excel中),显然效率很低,容易出错。让我们展示如何使用 R 编程环境来自动化这个过程。
准备
在使用 R 调用 API 之前,我们需要做一些必要的准备。
第一步是安装 R。
请先从本站下载R基础安装包。
R的下载位置比较多,建议选择清华大学的镜像,下载速度比较快。
请根据您的操作系统平台选择相应的版本进行下载。我使用的是 macOS 版本。
下载 pkg 文件。双击安装。
安装完基础包后,我们继续安装集成开发环境RStudio。它可以帮助您轻松地与 R 进行交互。 RStudio的下载地址在这里。
根据您的操作系统,选择对应的安装包。 macOS 安装包是一个 dmg 文件。双击打开后,将其中的RStudio.app图标拖到Applications文件夹,安装完成。
接下来,我们双击从应用程序目录运行 RStudio。
我们先在RStudio的Console中运行如下语句来安装一些需要用到的软件包:
install.packages("tidyverse")
install.packages("rlist")
安装完成后,在菜单中选择File->New,在如下界面选择R Notebook。
R Notebook 默认为我们提供了一个模板,其中收录一些基本的使用说明。
我们尝试点击编辑区(左侧)代码部分(灰色)中的运行按钮。
您可以立即看到绘图结果。
我们点击菜单栏上的Preview按钮来查看整个代码的结果。操作结果会显示在HTML文件中,图片和文字都可以。
熟悉环境后,是时候实际运行我们自己的代码了。我们保留左侧编辑区开头的描述区,删除其余部分,将文件名改为有意义的web-data-api-with-R。
到此,准备工作就做好了。现在我们就要开始实际操作了。
操作
在实际操作过程中,我们从维基百科中换了一个Wiki文章作为样本,以证明这种操作方法的通用性。选择的文章是我们在介绍词云制作时使用的那个,叫做“Yes, Minisiter”。这是一部 1980 年代的英国喜剧。
我们先在浏览器中试试看能否通过修改API示例中的参数来获取“是,部长”文章访问统计。作为测试,我们仅采集了 2017 年 10 月 1 日至 2017 年 10 月 3 日的 3 天数据。
与示例相比,我们需要替换的内容包括起止时间和文章title。
我们在浏览器的地址栏中输入:
https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/en.wikipedia/all-access/all-agents/Yes_Minister/daily/2017100100/2017100300
返回结果如下:
数据可以正常返回。下面我们将使用statement方法在RStudio中进行调用。
注意,在下面的代码中,程序输出的开头会有一个##标记,以区别于执行代码本身。
一出现,我们就需要设置时区。以后不处理时间数据时,会遇到错误。
Sys.setenv(TZ="Asia/Shanghai")
然后,我们调用 tidyverse 包,它是一个集合,加载了我们稍后将使用的许多函数。
library(tidyverse)
## Loading tidyverse: ggplot2
## Loading tidyverse: tibble
## Loading tidyverse: tidyr
## Loading tidyverse: readr
## Loading tidyverse: purrr
## Loading tidyverse: dplyr
## Conflicts with tidy packages ----------------------------------------------
## filter(): dplyr, stats
## lag(): dplyr, stats
这里可能会遇到一些警告,忽略即可。它对我们的运营没有影响。
根据前面的例子,我们定义了要查询的时间跨度,并指定了要搜索的wiki名称文章。
注意,与 Python 不同的是,在 R 语言中,使用了赋值
<p>starting