r - 在 R 中使用 JSON API 抓取和编译数据:所有可能的数据 ID 号
问题描述
我正在尝试从https://www.mountainproject.com/编译所有攀登路线信息,他们提供了一个 API 用于执行此操作https://www.mountainproject.com/data,但您需要知道具体的路线标识号即(“ https://www.mountainproject.com/data/get-routes?routeIds=IDNUMBER&key=PERSONAL-API-KEY ”)
没有 ID 号列表,但它们似乎都在 105,000,000 : 118,000,000 之内。总数应该在 200,000 左右。
我需要一种方法来遍历所有可能的路线 ID 号,找出哪些是真实路线,下载数据并将其添加到数据集 (csv)
我编写了一个函数和循环来执行此操作,它适用于少量可能的 ID,但对于所有 13,000,000 个可能的 ID 号,我计算出运行需要一个多月的时间。
我无法以矢量化的方式做到这一点,但我认为这可能是解决方案。
library(jsonlite)
#create the function to download the data
getRouteData<-function(routeID){
y<-paste0("https://www.mountainproject.com/data/get-routes?routeIds=",routeID,"&key=PERSONAL_API_KEY")
y<-as.data.frame(fromJSON(y))
#delete some unnecessary columns
y[,-(c(9:13,16))]
}
#Make an empty data frame
df <- data.frame(matrix(ncol = 10, nrow = 0))
colnames(df) <- c("routes.id","routes.name","routes.type",
"routes.rating","routes.stars","routes.starVotes",
"routes.pitches","routes.location",
"routes.longitude","routes.latitude" )
#try for just 50 possible IDs
for(i in 105759900:105759950){
try(df<-rbind(getRouteData(i),df))
}
#that works but is slow
df
这工作正常,但真的很慢。任何以不同方式整理不相关数字或加快流程的帮助将不胜感激!
解决方案
Mountain Project 提供了一个sitemap.xml,其中列出了一组文件(sitemap0.xml.gz、sitemap1.xml.gz、sitemap2.xml.gz等),其中包含其网站上的所有有效链接。您可以下载这些文件并遍历有效链接以提取您要查找的路由 ID。每个路线链接都有表格https://www.mountainproject.com/route/######/route-name-here
,######
您可以在其中找到路线 ID。
推荐阅读
- tensorflow - Tensorflow 独立分布数学
- java - 无法删除或更新父行:Spring Boot JPA 中的外键约束失败
- python - 使用 MDDropdownMenu 递归地动态选择项目的问题
- reactjs - 使用redux在反应中存储状态的最佳实践是什么
- python - 如何在 python 数据框中做季度?
- kivy - text_field 未在 kivymd 中单击
- powershell - 如何将文件名基于文件夹名称的文件移动到同一文件夹中的子文件夹
- ios - 在 SwiftUI 动态表单中声明 TextField 和 Toggle
- deep-learning - Earlystopping 不适用于深度学习模型
- c# - Unity 2D C#如何在点击时制作面向对象的坐标