文章采集api(如何用R调用API,提取和整理你需要的免费Web数据)

优采云 发布时间: 2022-02-27 00:28

  文章采集api(如何用R调用API,提取和整理你需要的免费Web数据)

  API是获取Web数据的重要方式之一。想了解如何使用 R 调用 API 来提取和组织您需要的免费 Web 数据吗?本文将逐步向您展示操作过程。

  

  交易

  俗话说,“聪明的女人,没有饭难煮”。就算你掌握了数据分析十八门武功,没有数据也是一件麻烦的事情。“拔刀而去,茫然不知所措”,大概就是这样。

  有很多数据来源。Web 数据是数量庞大且相对容易获取的类型之一。更好的是,很多网络数据都是免费的。

  在这个所谓的大数据时代,如何获取网络数据?

  许多人使用由他人编译和发布的数据集。

  他们很幸运,他们的工作可以建立在其他人的基础上。这是最有效的。

  但并不是每个人都这么幸运。如果您需要的数据从未被组织和发布过怎么办?

  事实上,这样的数据量更大。我们是否对他们视而不见?

  如果您考虑爬行动物,那么您的想法是正确的。爬虫可以为您获取几乎所有可见(甚至不可见)的网络数据。然而,编写和使用爬虫的成本很高。包括时间资源、技术能力等。如果你遇到任何网络数据获取问题,你不要想“大锤”,有时可能是“刀*敏*感*词*不入”。

  在“别人准备的数据”和“需要自己爬取的数据”之间,还有一个广阔的领域,这就是API的世界。

  什么是 API?

  它是应用程序编程接口的缩写。具体来说,某个网站的数据在不断的积累和变化。如果对这些数据进行整理,不仅费时,而且占用空间,而且还有刚整理完就过时的危险。大多数人需要的数据其实只是其中的一小部分,但时效性要求可能非常强。因此,组织存储并将其提供给公众以供下载是不经济的。

  但是,如果数据不能以某种方式打通,就会面临无数爬虫的骚扰。这会对网站的正常运行造成很大的困扰。折衷方案是 网站 主动提供通道。当你需要某部分数据时,虽然没有现成的数据集,但你只需要用这个通道描述你想要的数据,然后网站审核后(一般是自动化的,瞬间完成),认为我可以给你,我会立即发送你明确要求的数据。双方都很高兴。

  以后在找数据的时候,不妨看看目标网站有没有提供API,避免无用的努力。

  在这个github项目中,有一个非常详细的列表,涵盖了当前常见的主流网站API资源状况。作者还在整理和修改中,大家可以采集起来慢慢看。

  

  如果我们知道某个网站提供了API,通过查看文档知道我们需要的数据在那里,那么问题就变成了——如何通过API获取数据?

  下面我们用一个实际的例子来向您展示整个操作步骤。

  资源

  我们正在寻找的例子是维基百科。

  有关 Wikipedia 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<br style="box-sizing:border-box;margin:0px;padding:0px;" />

  我们可以在浏览器的地址栏中输入GET后的一长串URL,然后回车看看我们得到了什么结果。

  

  在浏览器中,我们看到了上图中的一长串文字。您可能想知道 - 这是什么?

  恭喜,这是我们需要得到的数据。但是,它使用一种称为 JSON 的特殊数据格式。

  JSON是互联网上数据交互的主流格式之一。如果你想了解 JSON 的含义和用法,可以参考这篇教程。

  在浏览器中,我们最初只能看到数据的第一部分。但它已经收录了有价值的内容:

  {"items":[{"project":"en.wikipedia","article":"Albert_Einstein","granularity":"daily","timestamp":"2015100100","access":"all-access","agent":"all-agents","views":18860}<br style="box-sizing:border-box;margin:0px;padding:0px;" />

  在本段中,我们看到项目名称(en.wikipedia)、文章 标题(Albert Einstein)、统计粒度(天)、时间戳(10/1/2015)、访问类型(全部)、终端类型(全部) 和访问次数 (18860).

  我们使用滑块将返回的文本拖到最后,我们会看到如下信息:

  {"project":"en.wikipedia","article":"Albert_Einstein","granularity":"daily","timestamp":"2015103100","access":"all-access","agent":"all-agents","views":16380}]}<br style="box-sizing:border-box;margin:0px;padding:0px;" />

  与 10 月 1 日的数据相比,只有时间戳(2015 年 10 月 31 日)和访问次数(16380))发生了变化。

  在中间,我们跳过了 10 月 2 日至 10 月 30 日之间的数据。存储格式相同,只是日期和访问次数的数据值在变化。

  您需要的所有数据都在这里,您只需提取相应的信息即可。但是如果手动进行(比如将需要的项目复制粘贴到Excel中),显然效率低下,容易出错。让我们展示如何使用 R 编程环境自动化这个过程。

  准备

  在正式用 R 调用 API 之前,我们需要做一些必要的准备工作。

  首先是安装R。

  请到本网站下载R基础安装包。

  

  R的下载位置比较多,建议选择清华镜像,下载速度比较快。

  

  请根据您的操作系统平台选择对应的版本进行下载。我正在使用 macOS 版本。

  下载 pkg 文件。双击安装。

  安装完基础包后,我们继续安装集成开发环境RStudio。它可以帮助您轻松和交互式地与 R 进行交流。RStudio的下载地址在这里。

  

  根据你的操作系统,选择对应的安装包。macOS 安装包是一个 dmg 文件。双击打开后,将RStudio.app图标拖到Applications文件夹下,安装完成。

  

  下面我们双击从应用程序目录运行RStudio。

  

  我们先在 RStudio 的 Console 中运行以下语句来安装一些需要的包:

  install.packages("tidyverse")<br style="box-sizing:border-box;margin:0px;padding:0px;" />install.packages("rlist")<br style="box-sizing:border-box;margin:0px;padding:0px;" />

  安装完成后,在菜单中选择File-&gt;New,在如下界面中选择R Notebook。

  

  R Notebook 默认为我们提供了一个带有一些基本使用说明的模板。

  

  让我们尝试在编辑区域(左)的代码部分(灰色)中单击运行按钮。

  

  情节的结果可以立即看到。

  我们点击菜单栏上的Preview按钮来查看整个代码的效果。操作的结果将以带有图片和文本的 HTML 文件的形式显示。

  

  现在我们已经熟悉了环境,是时候实际运行我们的代码了。我们把编辑区的开头描述区保留在左边,删除其余的,把文件名改成有意义的web-data-api-with-R。

  

  至此,准备工作就绪。现在我们要开始实际操作了。

  操作

  在实际操作过程中,我们以维基百科的另一个wiki文章为例来证明这种操作方法的通用性。选中的文章就是我们介绍词云制作时使用的那个,叫做“Yes, Minisiter”。这是一部 1980 年代的英国喜剧。

  

  我们先在浏览器中试一下,看看能否修改 API 示例中的参数,获取“是,部长”文章 的访问统计信息。作为测试,我们仅采集 2017 年 10 月 1 日至 2017 年 10 月 3 日 3 天的数据。

  与示例相反,我们需要替换的内容包括开始和结束时间以及 文章 标题。

  我们在浏览器的地址栏中输入:

  https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/en.wikipedia/all-access/all-agents/Yes_Minister/daily/2017100100/2017100300<br style="box-sizing:border-box;margin:0px;padding:0px;" />

  返回结果如下:

  

  数据可以正常返回。接下来,我们使用语句方法在 RStudio 中调用。

  请注意,在下面的代码中,程序的输出部分会在开头带有## 标记,以区别于执行代码本身。

  启动后,我们需要设置时区。否则,您稍后在处理时间数据时会遇到错误。

  Sys.setenv(TZ="Asia/Shanghai")<br style="box-sizing:border-box;margin:0px;padding:0px;" />

  然后,我们调用 tidyverse 包,它是一个可以同时加载许多函数的集合,我们稍后会用到。

  library(tidyverse)<br style="box-sizing:border-box;margin:0px;padding:0px;" /><br style="box-sizing:border-box;margin:0px;padding:0px;" />## Loading tidyverse: ggplot2<br style="box-sizing:border-box;margin:0px;padding:0px;" />## Loading tidyverse: tibble<br style="box-sizing:border-box;margin:0px;padding:0px;" />## Loading tidyverse: tidyr<br style="box-sizing:border-box;margin:0px;padding:0px;" />## Loading tidyverse: readr<br style="box-sizing:border-box;margin:0px;padding:0px;" />## Loading tidyverse: purrr<br style="box-sizing:border-box;margin:0px;padding:0px;" />## Loading tidyverse: dplyr<br style="box-sizing:border-box;margin:0px;padding:0px;" /><br style="box-sizing:border-box;margin:0px;padding:0px;" />## Conflicts with tidy packages ----------------------------------------------<br style="box-sizing:border-box;margin:0px;padding:0px;" /><br style="box-sizing:border-box;margin:0px;padding:0px;" />## filter(): dplyr, stats<br style="box-sizing:border-box;margin:0px;padding:0px;" />## lag():    dplyr, stats<br style="box-sizing:border-box;margin:0px;padding:0px;" />

  这里可能有一些警告,请忽略它们。它对我们的运营没有影响。

  根据前面的例子,我们定义要查询的时间跨度,并指定要查找的wiki文章的名称。

  请注意,与 Python 不同,在 R 中,赋值采用标记,而不是 =。不过,R 语言其实很容易上手。如果你坚持使用=,它也能识别,不会报错。

<p>starting

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线