解析html页面以制作数据帧时如何替换NA值?

时间:2017-03-17 22:25:52

标签: r xml web-scraping html-parsing rvest

在尝试解析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)))

1 个答案:

答案 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选择器,但如果您愿意,可以通过xpathhtml_nodes的{​​{1}}参数使用XPath。