先前曾发文,介绍如何使用Python爬取驾驶距离。这次,介绍R的爬虫方法。

依然分为两步:第一步,爬取经纬度;第二步,依据经纬度爬取距离。

假设我们要获取南京到上海的距离,首先获取两地的坐标。

library(xml2)
library(rvest)
library(dplyr)
library(stringr)
library(rjson)
library(jsonlite)
# 下面设置函数
coords = function(i) {
key = 你的高德密钥
address = i # 以城市名为自变数
url = str_c(https://restapi.amap.com/v3/geocode/geo?key=,key,&address=,address)
data = read_html(url, encoding=utf-8) %>% html_text()
df = as.data.frame(fromJSON(data)) # 将json格式转化为R的格式
return (df[geocodes.location]) # 返回该值
}
coords(南京市) # 获得南京市的坐标
coords(上海市) # 获得上海市的坐标

在RStudio中,显示结果如下:

进而根据所得的坐标,计算两地驾驶距离。

# 载入的包同上
# 下面设置函数
distance = function(i) {
key = 你的高德密钥
origins = i # 起始点坐标
destination = 121.473701,31.230416 # 以上海市为目的地
type = 1 # type=0或1,分别为直线或驾驶距离
url = str_c(https://restapi.amap.com/v3/distance?key=,key,&origins=,origins,&destination=,destination,&type=,type)
data = read_html(url,encoding=utf-8) %>% html_text()
df = as.data.frame(fromJSON(data)) # 将json格式转为R的格式
return (df[results.distance]) # 返回该值
}
distance(118.796877,32.060255) # 填入南京市坐标,爬取南京到上海的驾驶距离

在RStudio中,显示结果如下:

至于实际情况如何呢?我们可以使用高德地图来检验。如下图所示:

检验结果,请看方案一。

如果需要测试两地直线距离,只需要把type=1换成0即可,其余不需要变动。

至于批量处理,需要设置函数与循环,本人不赘述。

国服帅座,写于国庆。

次日修改。

推荐阅读:

查看原文 >>
相关文章