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"