使用R语言从维基百科爬取达拉斯场馆的经纬度信息
解决维基百科达拉斯场馆坐标爬取问题
完善后的完整代码
library(rvest) library(dplyr) url <- "https://en.wikipedia.org/wiki/Sports_in_Dallas" # 先获取表格节点,同时提取Venue的文本和对应的超链接 page <- read_html(url) table_node <- page %>% html_element(".wikitable") # 提取Team、Sport列文本,以及Venue的文本和链接 data <- table_node %>% html_table() %>% select(Team, Sport, Venue) %>% mutate(venue_url = table_node %>% html_elements("tr td:nth-child(3) a") %>% # 定位Venue列的超链接 html_attr("href") %>% paste0("https://en.wikipedia.org", .)) %>% # 补全完整URL slice(1:5) # 只取前5个场馆 # 循环获取每个场馆的经纬度 for(i in 1:nrow(data)){ # 访问场馆页面 venue_page <- read_html(data$venue_url[i]) # 获取Coordinates链接(通常在infobox里的坐标项) coord_link <- venue_page %>% html_element(".infobox .coordinates a") %>% html_attr("href") %>% paste0("https://en.wikipedia.org", .) # 访问坐标页面提取十进制经纬度 coord_page <- read_html(coord_link) decimal_coords <- coord_page %>% html_element(".geo-dec") %>% html_text() %>% strsplit(", ") %>% unlist() # 赋值给data的对应列 data$latitude[i] <- as.numeric(decimal_coords[1]) data$longitude[i] <- as.numeric(decimal_coords[2]) } # 查看结果 print(data)
关键说明
- 原代码仅提取了表格文本,新增
venue_url列用来获取场馆的维基百科超链接,通过定位表格第三列的<a>标签提取链接并补全完整URL。 - 使用
slice(1:5)筛选前5个目标场馆,匹配需求。 - 循环内先跳转至场馆页面,找到infobox中的坐标跳转链接,再进入坐标页面提取十进制格式的经纬度。
- 将提取到的经纬度字符串拆分后转为数值类型,分别存入
latitude和longitude列。
内容的提问来源于stack exchange,提问作者econ221
相关产品推荐
相关产品推荐

