在尝试解析html页面时,我们可以获得NA值。因此,当我们尝试使用列表中的数据构建数据框时,缺少值使其无法实现。
有没有简单的方法可以成功。请参阅以下示例:
library(rvest)
library(RCurl)
library(XML)
pg <- getURL("https://agences.axa.fr/ile-de-france/paris/paris-19e-75019")
page = htmlTreeParse(pg,useInternal = TRUE,encoding="UTF-8")
unlist(xpathApply(page,'//b[@class="Name"]',xmlValue))
data.frame(noms = unlist(xpathApply(page,'//b[@class="Name"]',xmlValue)),
rue = unlist(xpathApply(page,'//span[@class="street-address"]',xmlValue)))
答案 0 :(得分:0)
使用rvest和purrr(用于列表/函数编程的tidyverse包,与rvest很好地配对),
library(rvest)
library(purrr)
# be nice, only scrape once
h <- 'https://agences.axa.fr/ile-de-france/paris/paris-19e-75019' %>% read_html()
df <- h %>%
# select each list item
html_nodes('div.ListConseiller li') %>%
# for each item, make a list of parsed name and street; coerce results to data.frame
map_df(~list(nom = .x %>% html_node('b.Name') %>% html_text(),
rue = .x %>% html_node('span.street-address') %>% html_text(trim = TRUE)))
df
#> # A tibble: 14 × 2
#> nom rue
#> <chr> <chr>
#> 1 Marie France Tmim <NA>
#> 2 Rachel Tobie <NA>
#> 3 Bernard Licha <NA>
#> 4 David Giuili <NA>
#> 5 Myriam Yajid Khalfi <NA>
#> 6 Eytan Elmaleh <NA>
#> 7 Allister Charles <NA>
#> 8 Serge Savergne 321 Rue De Belleville
#> 9 Patrick Allouche 1 Rue Clavel
#> 10 Anne Fleiter 14 Avenue De Laumiere
#> 11 Eric Fitoussi <NA>
#> 12 Jean-Baptiste Crocombette 1 Bis Rue Emile Desvaux
#> 13 Eric Zunino 14 Rue De Thionville
#> 14 Eric Hayoun <NA>
为简洁起见,代码使用CSS选择器,但如果您愿意,可以通过xpath
和html_nodes
的{{1}}参数使用XPath。