2017-04-11 77 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")