Webscrape заголовок и списки на датафрейме с rvest - PullRequest
0 голосов
/ 04 сентября 2018

Я бы хотел скопировать гиперссылки на этой веб-странице в кадр данных со столбцами, показанными ниже. Исходная страница содержит заголовки и списки ссылок.

  • subject.heading (проблема)
  • hyperlink.title (OK)
  • гиперссылка (ОК)

Получение ссылок и названий просто (html_node "li" и "a"). Я не понимаю, как включить предметные заголовки в окончательный фрейм данных.

library(tidyverse)
library(rvest)

my.url <- read_html("http://www.secnav.navy.mil/fmc/fmb/Pages/Fiscal-Year-2019.aspx") %>% 
  html_nodes("#sharePointMainContent") 

hyperlink.title <- my.url %>% 
  html_nodes("li") %>% 
  html_text()

hyperlink <- my.url %>% 
  html_nodes("li") %>% 
  html_nodes("a") %>% 
  html_attr("href")

df <- tibble(title, hyperlink.title)

Я могу успешно очистить заголовки, но не могу понять, как правильно включить их в окончательный кадр данных.

subject.heading <- my.url %>% 
  html_nodes("h3") %>% 
  html_text() %>% str_trim()

Создано в 2018-09-03 пакетом представ (v0.2.0).

1 Ответ

0 голосов
/ 04 сентября 2018

Эта страница имеет странную структуру с таблицами внутри основной таблицы.

То, что я нашел для работы, - это итерация (map_df()) ячеек родительской таблицы (идентифицируемой классом s4-wpcell-plain). Каждая ячейка содержит другую таблицу, но мы можем просто извлечь то, что нам нужно, вместо того, чтобы полагаться на html_table().

library(tidyverse)    
library(rvest)
#> Loading required package: xml2


r <- read_html("http://www.secnav.navy.mil/fmc/fmb/Pages/Fiscal-Year-2019.aspx") %>% 
  html_node("#sharePointMainContent>div>table") %>% 
  html_nodes(".s4-wpcell-plain") %>% 
  map_df(~{
    heading <- .x %>% html_nodes('h3') %>% html_text() %>% str_trim()
    titles <- .x %>% html_nodes('li') %>% html_text()
    links <- .x %>% html_nodes('a') %>% html_attr("href")
    data_frame(heading, titles, links)
  })

r
#> # A tibble: 21 x 3
#>    heading                        titles                 links            
#>    <chr>                          <chr>                  <chr>            
#>  1 DEPARTMENT OF THE NAVY SUMMARY FY 19 DON Press Brief  http://www.secna…
#>  2 DEPARTMENT OF THE NAVY SUMMARY Supporting Exhibits    http://www.secna…
#>  3 DEPARTMENT OF THE NAVY SUMMARY Budget Highlights Book http://www.secna…
#>  4 DEPARTMENT OF THE NAVY SUMMARY The Bottom Line        http://www.secna…
#>  5 DEPARTMENT OF THE NAVY SUMMARY Report to Congress on… http://www.secna…
#>  6 DEPARTMENT OF THE NAVY SUMMARY Ship Building Plan SE… http://www.secna…
#>  7 MILITARY PERSONNEL PROGRAMS    Military Personnel, N… http://www.secna…
#>  8 MILITARY PERSONNEL PROGRAMS    Military Personnel, M… http://www.secna…
#>  9 MILITARY PERSONNEL PROGRAMS    Reserve Personnel, Na… http://www.secna…
#> 10 MILITARY PERSONNEL PROGRAMS    Reserve Personnel, Ma… http://www.secna…
#> # ... with 11 more rows

Создано в 2018-09-04 пакетом представ (v0.2.0).

...