r语言 - 带有 rvest 和 xpath 的抓取表,用于位置映射



我一直在尝试抓取一张表格,用于对全国各地的设施进行映射分析。但是,我似乎无法做到

我已经尝试了下面的代码,并意识到这个网站上没有可用的html表。

url <- `https://channel9.msdn.com/Events/useR-international-R-User-conferences/useR-International-R-User-2017-Conference?sort=status&direction=desc&page=`
table <- url %>%
  read_html() %>%
  html_nodes(xpath='//*[@id="views-form-resource-guide-results-page-1-results"]/div[1]') 

不确定我是否为 XPath 使用了正确的类,因为我得到了一个空白的数据框。如果我也能收到一些关于遍历所有信息页面的指导,我将不胜感激。

我是

R 的新手,但类似于以下内容,您定义了一个函数以从给定 url 检索行信息作为数据帧。循环访问您想要调用函数并将返回的 dfs 合并到一个大 df 中的页面数量。由于nodeList并不总是相同的长度,例如,并非每个列表都有电话号码,因此您需要测试元素是否存在于行的循环中。我在答案中使用了该方法 阿利斯泰尔(+给他(

我使用的是 css 选择器而不是 xpath。您可以在此处阅读有关它们的信息。

鉴于可能的页面的#,我会研究使用http会话。您可以获得重用连接的效率。我用其他语言使用它们;从快速的谷歌来看,似乎 R 提供了这个,例如,html_session。

我欢迎改进建议和任何更正缩进的编辑。我边走边学。

library(rvest)
library(magrittr)
library(purrr)

url <- "https://channel9.msdn.com/Events/useR-international-R-User-conferences/useR-International-R-User-2017-Conference?sort=status&direction=desc&page="
get_listings <- function(url){
    df <- read_html(url) %>% 
      html_nodes('.views-row') %>%
      map_df(~list(
                   title = html_node(.x, '.service-card__title a')%>% html_text(),
                   location = trimws(gsub('n', ' ',html_text(html_node(.x, '.service-card__address')))) %>% 
                              {if(length(.) == 0) NA else .}, 
                    telephone = html_node(.x, '.service-card__phone') %>% html_text() %>% 
                              {if(length(.) == 0) NA else .}
                  )
             )
      return(df)
}
pages_to_loop = 2
for(i in seq(1, pages_to_loop)){
  new_url <- paste0(url, i, sep= '')
  if(i==1){
    df <-  get_listings(new_url)
  } else {
    new_df <- get_listings(new_url)
    df <- rbind(df, new_df)
  }
}

最新更新