这是我scapre的网站 ppp projects
使用inspect元素得到的xpath是" // * [@ id =" pppListUl"] / li 1 / div 2 / span {{ 3}} /跨度"
我的scrpits如下:
a <- html("http://www.cpppc.org:8082/efmisweb/ppp/projectLivrary/toPPPList.do")
b <- html_nodes(a, xpath = '//*[@id="pppListUl"]/li[1]/div[2]/span[2]/span')
b
然后我得到了结果
{xml_nodeset (0)}
然后我检查了页面源代码,我甚至找不到任何关于我选择的项目的信息。
我想知道为什么我在页面源代码中找不到它,反过来,我怎样才能通过rvest获取节点。
答案 0 :(得分:2)
它对内容发出XHR请求。只需处理这些数据(非常干净):
library(httr)
POST('http://www.cpppc.org:8082/efmisweb/ppp/projectLivrary/getPPPList.do?tokenid=null',
encode="form",
body=list(queryPage=1,
distStr="",
induStr="",
investStr="",
projName="",
sortby="",
orderby="",
stageArr="")) -> res
content(res, as="text") %>%
jsonlite::fromJSON(flatten=TRUE) %>%
dplyr::glimpse()
(StackOverflow不够高级,不能让我发布它的输出,因为它认为它是垃圾邮件)。
这是一个包含字段totalCount
,list
(包含实际数据),currentPage
和totalPage
的4个元素列表。
看起来您可以更改queryPage
表单变量来遍历页面以获取整个列表/数据库,如:
library(httr)
library(purrr)
library(dplyr)
get_page <- function(page_num=1, .pb=NULL) {
if (!is.null(.pb)) pb$tick()$print()
POST('http://www.cpppc.org:8082/efmisweb/ppp/projectLivrary/getPPPList.do?tokenid=null',
encode="form",
body=list(queryPage=page_num,
distStr="",
induStr="",
investStr="",
projName="",
sortby="",
orderby="",
stageArr="")) -> res
content(res, as="text") %>%
jsonlite::fromJSON(flatten=TRUE) -> dat
dat$list
}
n <- 5 # change this to the value in `totalPage`
pb <- progress_estimated(n)
df <- map_df(1:n, get_page, pb)