2017-04-11 84 views
0

我想刮掉的表格中包含網址。如果我運行代碼,我只能得到具有url描述的列。如何獲得實際上具有列的表格(在mycase的第二列中)以及URL而不是它們的描述),還是具有完整的錨定代碼?。我需要它從表格的第二列中的URL中提取兩個索引代碼。我想刮的鏈接看起來像:https://aplikacje.nfz.gov.pl/umowy/Agreements/GetAgreements?ROK=2017&ServiceType=03&ProviderId=20795&OW=15&OrthopedicSupply=False&Code=150000001和我需要ProviderId和代碼數字,但拳頭我需要在下面的代碼刮下表中的鏈接。rvest:使用網址而不是文字提取表格

table<-0 
library(rvest) 
for (i in 1:10){ 
    url<-paste0("https://aplikacje.nfz.gov.pl/umowy/Provider/Index?ROK=2017&OW=15&ServiceType=03&OrthopedicSupply=False&page=",i) 
    page<-html_session(url) 
    table[i]<-html_table(page) 
} 

感謝您的所有意見和幫助。

回答

2

這SHLD幫助得到一個不錯的,乾淨的,完成你想要的的HREFs表:

library(rvest) 
library(tidyverse) 

# Helpers 
rm_extra <- function(x) { gsub("\r.*$", "", x) } 

mk_gd_col_names <- function(x) { 
    tolower(x) %>% 
    gsub("\ +", "_", .) 
} 

URL <- "https://aplikacje.nfz.gov.pl/umowy/Provider/Index?ROK=2017&OW=15&ServiceType=03&OrthopedicSupply=False&page=%d" 

get_table <- function(page_num = 1) { 

    pg <- read_html(sprintf(URL, page_num)) 

    tab <- html_nodes(pg, "table") 

    html_table(tab)[[1]][,-c(1,11)] %>% 
    set_names(rm_extra(colnames(.) %>% mk_gd_col_names)) %>% 
    mutate_all(funs(rm_extra)) %>% 
    mutate(link = html_nodes(tab, xpath=".//td[2]/a") %>% html_attr("href")) %>% 
    as_tibble() 

} 

pb <- progress_estimated(10) 
map_df(1:10, function(i) { 
    pb$tick()$print() 
    get_table(page_num = i) 
}) -> full_df 

glimpse(full_df) 
## Observations: 93 
## Variables: 10 
## $ kod       <chr> "150000016", "150005039", "1500046... 
## $ nazwa_świadczeniodawcy  <chr> "SAMODZIELNY PUBLICZNY ZAKŁAD OPIE... 
## $ miasto      <chr> "GRODZISK WIELKOPOLSKI", "KALISZ",... 
## $ ulica      <chr> "MOSSEGO 17", "POZNAŃSKA 23", "OS.... 
## $ kod_pocztowy    <chr> "62065", "62800", "60688", "62510"... 
## $ nip       <chr> "9950036856", "6181976770", "97201... 
## $ regon      <chr> "317760", "251525840", "630804009"... 
## $ sumaryczna_kwota_zobowiązań <chr> "8 432 922,00", "332 078,25", "416... 
## $ szczegóły     <chr> "Umowy", "Umowy", "Umowy", "Umowy"... 
## $ link      <chr> "/umowy/Agreements/GetAgreements?R... 

full_df 
## # A tibble: 93 × 10 
##   kod 
##  <chr> 
## 1 150000016 
## 2 150005039 
## 3 150004658 
## 4 150009135 
## 5 150003546 
## 6 150000066 
## 7 150003556 
## 8 150000073 
## 9 150003539 
## 10 150008909 
## # ... with 83 more rows, and 9 more variables: 
## # nazwa_świadczeniodawcy <chr>, miasto <chr>, ulica <chr>, 
## # kod_pocztowy <chr>, nip <chr>, regon <chr>, 
## # sumaryczna_kwota_zobowiązań <chr>, szczegóły <chr>, link <chr> 
+0

看起來不錯,但在我的機器上效果不好。它向我拋出:'open.connection(x,「rb」)錯誤: 對等證書無法使用給定的CA證書進行認證# –

+0

現在它在我使用httr :: GET技巧後可以使用! http://stackoverflow.com/questions/34551299/how-to-pass-ssl-verifypeer-in-rvest –

+0

你可能想考慮更新你的本地系統CA. – hrbrmstr

1

以下是如何從一個頁面獲取它們的方法。請注意,我用的是%>%運營商,這使得更容易閱讀,但你可以只嵌套調用,如果你喜歡

library(rvest) 
url<-paste0("https://aplikacje.nfz.gov.pl/umowy/Provider/Index?ROK=2017&OW=15&ServiceType=03&OrthopedicSupply=False&page=1") 
page<-html_session(url) 
links <- html_nodes(page, 'table') %>% html_nodes("a") %>% html_attr("href")