从JSON中提取R数据的网络爬虫

从JSON中提取R数据的网络爬虫

许多网站以JSON格式提供他们的数据,以供使用。JSON(JavaScript Object Notation)是一种基于JavaScript对象语法的文本格式,用于表示结构化数据。在这篇文章中,我们将看到如何从JSON网络源中提取数据并在R编程语言中使用它。

从JSON中刮取网络数据

我们将刮取这里提供的关于COVID案例的JSON数据,它看起来像这样。

从JSON中提取R数据的网络爬虫

原始JSON数据

为了在R中获得这些数据,我们需要一个叫做 jsonlite的 库 。 这个库并没有预装在R中,所以要安装它。也有必要在脚本中包含它。

# installing the library
install.packages("jsonlite")
  
# include it
library(jsonlite)

现在我们已经加载了这个库,我们可以使用 fromJSON 函数来解析数据。将上面给出的关于COVID数据的相同URL传递给该函数,其中 原始数据 是一个包含信息的大列表。

# scraping the JSON data to R
rawdata <- fromJSON("https://data.covid19india.org/v4/min/timeseries.min.json")

获取数据

现在让我们尝试访问一些信息。如果我们简单地输出 rawdata, 我们会得到这个长长的列表,其中包含了印度所有邦和联邦区的COVID案例的数据。

从JSON中提取R数据的网络爬虫

如果我们只想获得德里的数据,即DL的数据,我们可以在网页上查看JSON格式,并尝试这样做。

# getting the information for DL (Delhi)
data <- rawdata['DL']

它输出关于德里的所有信息。

从JSON中提取R数据的网络爬虫

数据

如果我们想要关于某个特定日期的信息,我们可以通过访问2020-03-16的数据来实现。正如你在JSON中看到的那样。

# data for specific date
data[[1]][[1]][[15]]

输出

从JSON中提取R数据的网络爬虫

2020年3月16日为DL提供数据

你可以继续对这个列表进行各种操作,比如分析数据、绘制图表等等。请看这个关于R列表的教程,以尝试这些操作。

使用XPath进行网络爬虫

为了直接从HTML元素中抓取数据,我们可以使用称为XPath的东西。该元素的XPath可以通过检查元素找到。在Chrome浏览器中。

right-click> inspect > right click on the element > click Copy full XPath.

首先,我们需要安装 rvest 包,这是一个用于搜刮网页的库。

install.packages('rvest')

因此,假设我们有兴趣在trainman.in上搜刮这个URL上的14553号列车的时刻表。

https://www.trainman.in/train/14553

然后在检查中选择时间表中的第一行元素。

从JSON中提取R数据的网络爬虫

为演示目的而刮取的示范性网站

继续并复制上面提到的XPath。它将是这样的,也可能会改变。

/html/body/app-root/app-wrapper/div/main/train-schedule
/div[2]/div[1]/div/div[3]/table/tbody/tr[1]

从JSON中提取R数据的网络爬虫

选择复制以填充XPath选项,以获得菜单

我们得到的XPath只针对一行。那其他的行呢?为此,从 tr [2]中删除下标部分。

/html/body/app-root/app-wrapper/div/main/train-schedule
/div[2]/div[1]/div/div[3]/table/tbody/tr

所以现在它不仅给出了一条记录,而且给出了表中的所有记录。要在R中刮取这些数据,需要调用URL,并存储它。现在通过调用 read_html(URL) 获得HTML数据 。 现在要过滤出特定的元素,使用 html_nodes() 传递页面和XPath 。并使用 **% >% html_text() **来只获得不包括标签和细节的文本部分。

# include the installed library rvest
library(rvest)
  
# call the url
url <- "https://www.trainman.in/train/14553"
  
# get the data
page <- read_html(url)
  
# filter the required data using xpath
rows <- html_nodes(page, xpath = "/html/body/app-root/app-wrapper/div/main/train-schedule/div[2]/div[1]/div/div[3]/table/tbody/tr") %>% html_text()
  
# print
rows

输出

从JSON中提取R数据的网络爬虫

从网站上刮取的数据

如果我们简单地复制了<table>标签的XPath,那么我们将只得到一个包含所有车站的条目,而不是25个条目。

从JSON中提取R数据的网络爬虫

来自网站的原始数据

这种方法不仅适用于表标签,而且适用于任何HTML元素,而且根据网页的结构可能会有细微的差别。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程