rvest - найти html -узел с номером последней страницы - PullRequest
2 голосов
/ 29 мая 2020

Я изучаю веб-скрейпинг и создал для себя небольшое упражнение, чтобы очистить все заголовки сайта с рецептами: https://pinchofyum.com/recipes?fwp_paged=1. (Меня вдохновил этот пост: https://www.kdnuggets.com/2017/06/web-scraping-r-online-food-blogs.html).

Я хочу очистить значение последнего номера страницы, который (на момент написания) равен 64 . Вы можете найти количество страниц внизу. Я вижу, что он хранится как «a.facetwp-page last», но по какой-то причине не может получить доступ к этому узлу. Я вижу, что значения номеров страниц хранятся как 'data-page', но я не могу получить это значение через 'html_attrs'.

Я считаю, что родительский узел - это «div.facetwp-pager» и я могу получить к нему доступ следующим образом:

library(rvest)
pg <- read_html("https://pinchofyum.com/recipes")
html_nodes(pg, "div.facetwp-pager")

Но это насколько я понимаю. Думаю, мне не хватает чего-то маленького, но я не могу понять, что это такое. Я знаю о Rselenium, но я хотел бы знать, можно ли и как получить это значение последней страницы (64) с помощью rvest.

1 Ответ

1 голос
/ 29 мая 2020

Иногда очистка с помощью rvest не работает, особенно когда веб-страница динамически создается с помощью сценария java (я также не смог очистить эту информацию с помощью rvest). В таких случаях вы можете использовать пакет RSelenium. Мне удалось очистить желаемый элемент следующим образом:

library(RSelenium)

rD <- rsDriver(browser = c("firefox")) #specify browser type you want Selenium to open
remDr <- rD$client
remDr$navigate("https://pinchofyum.com/recipes?fwp_paged=1") # navigates to webpage

webElem <- remDr$findElement(using = "css selector", ".last") #find desired element

txt <- webElem$getElementText() # gets us the HTML

#> txt
#>[[1]]
#>[1] "64"
...