rvest:使用url'提取表;s代替文本

rvest:使用url'提取表;s代替文本,r,web-scraping,rvest,R,Web Scraping,Rvest,我想抓取的表中有url。如果我运行代码,我只会得到带有url描述的列。如何获取实际包含一列(在mycase中是第二列)的表,该列包含URL而不是其描述),或者包含锚定的完整html代码?。我需要它从表的第二列的URL中提取两个索引代码。我想抓取的链接看起来是这样的:我需要ProviderId和代码号,但首先我需要表中的链接被下面的代码抓取 table<-0 library(rvest) for (i in 1:10){ url<-paste0("https://aplikacje

我想抓取的表中有url。如果我运行代码,我只会得到带有url描述的列。如何获取实际包含一列(在mycase中是第二列)的表,该列包含URL而不是其描述),或者包含锚定的完整html代码?。我需要它从表的第二列的URL中提取两个索引代码。我想抓取的链接看起来是这样的:我需要ProviderId和代码号,但首先我需要表中的链接被下面的代码抓取

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)
}

table以下是如何从一页中获取它们。请注意,我使用%>%运算符,这使阅读更容易,但如果愿意,您可以嵌套调用

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")
库(rvest)

url此shld帮助获得一个漂亮、干净、完整的表,其中包含您想要的HREF:

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>
库(rvest)
图书馆(tidyverse)
#助手
rm_额外%html_属性(“href”))%%>%
作为_tible()
}
全方位
一瞥(全方位)
##意见:93
##变量:10
##$kod“15000016”、“150005039”、“1500046”。。。
##$nazwaświadczenodawcy“SAMODZIELNY PUBLICZNY ZAKŁAD OPIE。。。
##$miasto“GRODZISK WIELKOPOLSKI”、“KALISZ”,。。。
##$ulica“MOSSEGO 17”,“POZNAŃSKA 23”,“OS…”。。。。
##$kod_pocztowy“62065”、“62800”、“60688”、“62510”。。。
##$nip“9950036856”、“6181976770”、“97201…”。。。
##$regon“317760”、“25525840”、“63084009”。。。
##$sumaryczna_kwota_zobowiązan“8432922,00”,“332078,25”,“416…”。。。
##$szczegóły“Umowy”、“Umowy”、“Umowy”、“Umowy”。。。
##$link”/umowy/Agreements/GetAgreements?R。。。
全方位
###A tible:93×10
##柯德
##        
## 1  150000016
## 2  150005039
## 3  150004658
## 4  150009135
## 5  150003546
## 6  150000066
## 7  150003556
## 8  150000073
## 9  150003539
## 10 150008909
## # ... 再增加83行和9个变量:
##乌利卡州米亚斯托市纳兹瓦·维亚德齐诺达西,
###kod#u pocztowy,nip,regon,
###sumaryczna#u kwota_zobowiązan,szczegó322; y,林克

看起来不错,但在我的机器上效果不好。它向我抛出:
打开时出错。连接(x,“rb”):对等证书无法使用给定的CA证书进行身份验证
现在它在我使用httr::GET-trick from your comment后工作!您可能需要考虑更新您的本地系统CAS。在没有找到链接下的表的情况下,它会给我一个错误。然后,我希望它继续下去,如果可以的话,得到下一张桌子。如何跳过此链接?我尝试了try()
map_df(1:nrow(full_df2),函数(I){pb$tick()$print()try(get_table(page_num=I,silent=T)})->full_df3
没有帮助。它在bind_rows_ux,.id中向我抛出了一个错误
无法将对象转换为数据帧
我似乎通过将html_表(tab)[[1]][,-c(1,8)]%>%放在注释中解决了这个问题。。。。函数get_表中的一部分在trycatch(,silent=T)中。我意识到这很难看。我羞于把它写在你的答案里。您能否建议它是否可以打印注释:警告,这次找不到表,然后继续?