2016-10-19 6 views
1

Dies ist die Website I scapre ppp projectsrvest nicht finden können Knoten mit XPath

Ich möchte XPath verwenden, um den Knoten wie unter enter image description here

XPath-I-Element erhalten auszuwählen durch Verwendung inspizieren ist „// * [@ id = "pppListUl"]/li 1/div 2/span 2/span“

Meine scrpits wie sind unten:

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 

Dann bekam ich das Ergebnis

{xml_nodeset (0)} 

Dann die Seite Quelle, die ich überprüfen, habe ich nicht einmal etwas über das Projekt finde ich ausgewählt.

Ich fragte mich, warum ich es nicht in der Seitenquelle finden kann, und wie kann ich wiederum den Knoten von RVST bekommen.

Antwort

2

Es macht eine XHR-Anfrage für den Inhalt. arbeiten nur mit dieser Daten (es ist ziemlich sauber):

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 noch nicht fortgeschritten genug ist mir die Ausgabe von dem zu lassen, sobald es Spam ist es denkt).

Es ist eine 4-Element-Liste mit Feldern totalCount, list (die die tatsächlichen Daten hat), und currentPagetotalPage.

Es sieht aus wie Sie die queryPage Formularvariablen ändern kann durch die Seiten zu durchlaufen die ganze Liste/Datenbank zu bekommen, so etwas wie:

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) 
+0

Vielen Dank! es läuft gut! – rankthefirst