在 R 中从维基百科抓取经纬度信息

问题描述 投票:0回答:1

我想提取达拉斯五个体育场的经纬度信息。这五个体育场中的每一个都列在名为“场地”的列中,并以来自以下网站的维基百科表格的超链接形式呈现:https://en.wikipedia.org/wiki/Sports_in_Dallas.

我的目标是编写一些代码,允许我进入每个超链接并通过“坐标”中的信息打开另一个超链接以获取十进制形式的纬度和经度。

我的“数据”表中需要一个名为“纬度”的新列和另一个名为“经度”的列。

我正在尝试循环播放它,但不知道如何获得它。

拜托,我需要你的帮助。

library(rvest)
library(dplyr)

url = "https://en.wikipedia.org/wiki/Sports_in_Dallas"

data <- read_html(url) %>%
  html_element(".wikitable")%>%
  html_table()%>%
  select(Team, Sport, Venue)

for(i in 1:nrow(data)){
  
  data$latitude <- 

  data$longitude <- 
}

r web-scraping hyperlink wikipedia
1个回答
0
投票

我已经能够使用以下代码提取体育场的纬度和经度:

library(RSelenium)
library(stringr)

shell('docker run -d -p 4446:4444 selenium/standalone-firefox')
remDr <- remoteDriver(remoteServerAddr = "localhost", port = 4446L, browserName = "firefox")
remDr$open()
remDr$navigate("https://en.wikipedia.org/wiki/Sports_in_Dallas")

list_Text <- list()
list_Url <- list()
counter <- 0

for(i in 1 : 10)
{
  for(j in 1 : 10)
  {
    print(paste0("i ", i, " j ", j))
    xpath <- paste0('//*[@id="mw-content-text"]/div[1]/table[1]/tbody/tr[', i, ']/td[3]/a[', j, ']')
    web_Obj <- tryCatch(remDr$findElement("xpath", xpath), error = function(e) NA)
    
    if(is.na(web_Obj) == FALSE)
    {
      counter <- counter + 1
      list_Text[[counter]] <- web_Obj$getElementText()[[1]]
      list_Url[[counter]] <- web_Obj$getElementAttribute("href")[[1]]
    }
  }
}

vec_Text <- unlist(list_Text)
vec_Url <- unlist(list_Url)
bool_Stadium <- stringr::str_detect(vec_Text, "Stadium")
vec_Text_Stadium <- vec_Text[bool_Stadium]
vec_Text_Url <- vec_Url[bool_Stadium]
nb_Url <- length(vec_Text_Url)

list_Latitude <- list()
list_Longitude <- list()

for(i in 1 : nb_Url)
{
  print(i)
  remDr$navigate(vec_Text_Url[i])
  web_Obj_Latitude <- remDr$findElement("class name", "latitude")
  web_Obj_Longitude <- remDr$findElement("class name", "longitude")
  list_Latitude[[i]] <- web_Obj_Latitude$getElementText()
  list_Longitude[[i]] <-  web_Obj_Longitude$getElementText()
}

list_Latitude
[[1]]
[[1]][[1]]
[1] "32°45′23″N"


[[2]]
[[2]][[1]]
[1] "32°50′23″N"


[[3]]
[[3]][[1]]
[1] "32°44′52″N"


[[4]]
[[4]][[1]]
[1] "32°55′46″N"


[[5]]
[[5]][[1]]
[1] "33°9′16″N"


> list_Longitude
[[1]]
[[1]][[1]]
[1] "97°5′5″W"


[[2]]
[[2]][[1]]
[1] "96°54′39″W"


[[3]]
[[3]][[1]]
[1] "97°5′34″W"


[[4]]
[[4]][[1]]
[1] "97°6′43″W"


[[5]]
[[5]][[1]]
[1] "96°50′7″W"

© www.soinside.com 2019 - 2024. All rights reserved.