#r #rvest #rselenium
#r #rvest #rselenium
Вопрос:
Это веб-страница, на которой я пытаюсь получить необходимую мне информацию: https://www.immobiliare.it/ricerca-mappa/Torino,TO/#/linkZona_/latitudine_45.04463/longitudine_7.68199/idContratto_1/idCategoria_23/zoom_16/pag_1
и это XPath, связанный с узлом, который мне интересен:
//*[@id="box-listing"]/div[1]
При использовании
out %>%html_node(xpath = '//*[@id="box-listing"]/div[1]')
Я получаю следующую ошибку
{xml_missing}
<NA>
Комментарии:
1. Я не уверен,
html_node
но многие инструменты очистки не поддерживают https. Если у вас есть только одна страница, попробуйте сохранить ее из браузера, а затем прочитать свою локальную копию.2. Спасибо, после некоторых исследований я полагаю, что это связано с динамическим обновлением страницы. Я смотрю на пакет Selenium и пытаюсь понять, как его использовать
Ответ №1:
Чтобы решить вашу проблему, я предлагаю вам использовать Rselinium
У нас есть два больших семейства веб-сайтов. Статический веб-сайт и динамический веб-сайт. В первом есть информация, которая нам нужна внутри кода (например, веб-страница Wikipidia), вместо этого во втором фактически нет информации внутри кода, но она проходит через код Javascript каждый раз, когда нам это нужно (например, Trip Advisor). Благодаря Rselenium
библиотеке мы можем собирать информацию с динамического веб-сайта. Что такое селен? RSelenium
это библиотека R, но мы можем найти ее в Python
, Java
а также в других типах кода, и она способна имитировать поведение человека. Основное использование Selenium
заключается в тестировании автоматизации приложения, но это не тот случай.
Селен — очень большой мир (отсюда до глубины души).
О Rselenium Я предлагаю вам проверить эти ссылки:
Ниже приведен небольшой пример использования Rselenium по вашему вопросу:
library(RSelenium)
#We start the RSelenium environment
driver <- rsDriver(browser=c("firefox"),port = 4445L)
remote_driver <- driver[["client"]]
#We send the url to the firefox browser
remote_driver$navigate("https://www.immobiliare.it/ricerca-mappa/Torino,TO/#/linkZona_/latitudine_45.04462/longitudine_7.68199/idContratto_1/idCategoria_23/zoom_16/pag_1")
Below some example of the Rselenium powerful
#We get the text
text_1<-remote_driver$findElement(using = "css selector", '#box-listing > div:nth-child(1) > div:nth-child(1)')$getElementText()
print(text_1)
[[1]]
[1] "PREMIUMnImmobilen€ 150.000n60 m² • 2 locali"
#We click the element
remote_driver$findElement(using = "css selector", '#box-listing > div:nth-child(1) > div:nth-child(1)')$clickElement()