我是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()
非常感谢任何有关如何解决此问题的帮助。
答案 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")