用rvest从网上读表

时间:2018-01-15 03:29:25

标签: r web-scraping rvest

我是R和网络抓取新手。我试图将世界银行网站的表格读入R.

以下是其中一个项目的网址链接(我的目标是阅读"基本信息"下的左表):http://projects.worldbank.org/P156880/?lang=en&tab=details

我正在使用Chrome的Dedvtools来识别该特定表所需的选择器节点。

这是我的代码:

library(rvest)
url <- "http://projects.worldbank.org/P156880/?lang=en&tab=details"
details <- url %>% 
        read_html() %>% 
        html_nodes(css = '#projectDetails > div:nth-child(2) > div.column-left > table') %>%
        html_table()

不幸的是,我得到一个空列表:

> details
list()

非常感谢任何有关如何解决此问题的帮助。

1 个答案:

答案 0 :(得分:0)

此站点使用您可以使用httr获取的XML http请求。打开Chrome开发者工具,转到“网络”标签,然后在上方加载您的网址。您将注意到在加载页面时请求了其他四个网址,因此请单击projectdetails?,您应该会在“预览”选项卡中看到html表。接下来,右键单击projectdetails?并复制为cURL到文本编辑器,并将URL,Referer和X-Requested-With粘贴到下面的httr GET函数中。

library(httr)
library(rvest)

res <- GET(
  url = "http://projects.worldbank.org/p2e/projectdetails?projId=P156880&lang=en",
  add_headers(Referer = "http://projects.worldbank.org/P156880/?lang=en&tab=details", 
   `X-Requested-With` = "XMLHttpRequest")
)  
content(res) %>% html_node("table") %>% html_table( header=TRUE)
                Project ID                     P156880
  1                 Status                      Active
  2          Approval Date           December 14, 2017
  3           Closing Date           December 15, 2023
  4                Country                    Colombia
  5                 Region Latin America and Caribbean
  6 Environmental Category                           B

或编写一个函数来获取任何项目ID

 get_project <-function(id){
   res <- GET(
     url = "http://projects.worldbank.org",
    path = paste0("p2e/projectdetails?projId=", id, "&lang=en"),
    add_headers(
      Referer = paste0("http://projects.worldbank.org/", id, "/?lang=en&tab=details"), 
      `X-Requested-With` = "XMLHttpRequest")
  ) 
  content(res) %>% html_node("table") %>% html_table(header=TRUE)
}
get_project("P156880")