Web-скрапинг
Задание 1
Установите и подключите пакет rvest. Импортируйте страницу https://cran.r-project.org/web/packages/rvest/index.html.
Задание 2
Проверьте, что страница импортировалась - выведите на печать структуру страницы или дочерние ноды. Для сокращения объема вывода можно просто вывести дочерние ноды от <body>.
Ноды организованы в виде списка, поэтому и навигация по ним соответствующая - для получения элементов <body> надо именно вызывать не второй элемент списка html_children(page), а элементы второго списка:
html_children(page)[[2]]## {html_node}
## <body>
## [1] <div class="container">\n<h2>rvest: Easily Harvest (Scrape) Web Pages</h2 ...
Задание 3
Используя полный путь XPath, выведите на печать заголовок страницы (rvest:...).
html_element(page, xpath = '/html/body/div/h2') %>%
html_text()## [1] "rvest: Easily Harvest (Scrape) Web Pages"
Задание 4
Используя сокращенный XPath-путь, выведите на печать заголовок страницы (rvest:...), тег h2 единственный на всей странице.
html_element(page, xpath = '//h2') %>%
html_text()## [1] "rvest: Easily Harvest (Scrape) Web Pages"
Задание 5
Выведите на печать h4-заголовок второго блока (Reverse dependencies:).
html_element(page, xpath = '//h4[2]') %>%
html_text()## [1] "Downloads:"
Задание 6
Выведите на печать все h4-заголовки.
Наиболее очевидный путь - пройти циклом/lapply и собрать все заголовки. Правда, в этом случае придется включать проверку на наличие элемента. Можно пойти простым и чуть более рискованным путем, приемлемым для примитивных сайтов.
html_elements(page, xpath = '//h4') %>%
html_text()## [1] "Documentation:" "Downloads:" "Reverse dependencies:"
## [4] "Linking:"
Задание 7
Выведите на печать блок информации о пакете (от Version: 0.3.5 до Downlods:). Можно сократить вывод до трех строк.
x <- html_element(page, xpath = '/html/body/div/table') %>%
html_table(header = FALSE)
head(x, 3)## # A tibble: 3 × 2
## X1 X2
## <chr> <chr>
## 1 Version: "1.0.2"
## 2 Depends: "R (≥ 3.2)"
## 3 Imports: "httr (≥ 0.5), lifecycle (≥ 1.0.0), magrittr, rlang (≥\n0.4.10), sel…
Задание 8
Выведите на печать блок информации о пакете (от Version: 0.3.5 до Downlods:). Можно сократить вывод до трех строк. Вместо полного XPath-пути используйте сокращенный путь с фильтрацией по классу.
x <- html_element(page, xpath = '//table[@summary="Package rvest summary"]') %>%
html_table(header = FALSE)
head(x, 3)## # A tibble: 3 × 2
## X1 X2
## <chr> <chr>
## 1 Version: "1.0.2"
## 2 Depends: "R (≥ 3.2)"
## 3 Imports: "httr (≥ 0.5), lifecycle (≥ 1.0.0), magrittr, rlang (≥\n0.4.10), sel…
Задание 9
Извлеките и выведите на печать версию пакета (Version).
Тэг tbody появляется при рендере таблицы браузером, в исходном коде страницы (которые и импортируется с помощью read_html())он отсутствует, поэтому его надо исключить.
html_element(page, xpath = '//table[@summary="Package rvest summary"]/tr[1]/td[2]') %>%
html_text()## [1] "1.0.2"
Задание 10
Извлеките и выведите на печать рекомендуемую ссылку на пакет (Please use the canonical form).
html_element(page, xpath = '//p[2]/a') %>%
html_attr('href')## [1] "https://CRAN.R-project.org/package=rvest"