Очистить имя атрибута HTML rvest

#r #web-scraping #rvest

#r #веб-очистка #rvest

Вопрос:

Я пытаюсь очистить веб-сайт объявлений о вакансиях с помощью rvest (https://www.stepstone.de/5/ergebnisliste.html?stf=freeTextamp;ns=1amp;qs=[]amp;companyID=0amp;cityID=0amp;sourceOfTheSearchField=homepagemex:generalamp;searchOrigin=Homepage_top-searchamp;ke=building information modeliingamp;ws=amp;ra=30).

Я хочу извлечь дату создания публикации вакансии (2020-12-07T02:13:28 01:00), которую можно найти здесь:

 <time class="" datetime="2020-12-07T02:13:28 01:00" timeago-id="17">vor 1 Woche</time>
 

Однако мне удается узнать, сколько дней назад была создана публикация вакансии, например, vor 1 Woche (1 неделя назад). Мой код выглядит следующим образом:

 url = "https://www.stepstone.de/5/ergebnisliste.html?stf=freeTextamp;ns=1amp;qs=[]amp;companyID=0amp;cityID=0amp;sourceOfTheSearchField=homepagemex:generalamp;searchOrigin=Homepage_top-searchamp;ke=building information modeliingamp;ws=amp;ra=30"
read_html(url) %>%
  html_nodes('time') %>% 
  html_text()
 

Рад любой помощи! Спасибо!

Комментарии:

1. Эти атрибуты не существуют в необработанном html. Они добавляются динамически в вашем браузере из глубоко вложенной строки json на той же странице с использованием javascript. Было бы возможно получить временные метки, но для их извлечения потребовалось бы много синтаксического анализа. Возможно, вам лучше пройти по маршруту RSelenium здесь

Ответ №1:

Во-первых, «datetime» является атрибутом, поэтому вы захотите попробовать использовать html_attr или html_attrs.

Во-вторых, что более важно, я не вижу даты и времени ни в одном из ваших узлов (только класс). Вы уверены, что это атрибут на этом веб-сайте для всех временных узлов?

 > library(rvest)
> 
> url = "https://www.stepstone.de/5/ergebnisliste.html?stf=freeTextamp;ns=1amp;qs=[]amp;companyID=0amp;cityID=0amp;sourceOfTheSearchField=homepagemex:generalamp;searchOrigin=Homepage_top-searchamp;ke=building information modeliingamp;ws=amp;ra=30"
> test = read_html(url) %>%
    html_nodes('time')
> 
> test
{xml_nodeset (25)}
 [1] <time class="">vor 1 Woche</time>
 [2] <time class="">vor 1 Woche</time>
 [3] <time class="">vor 2 Tagen</time>
 [4] <time class="">vor 1 Woche</time>
 [5] <time class="">vor 6 Tagen</time>
 [6] <time class="">vor 12 Stunden</time>
 [7] <time class="">vor 18 Stunden</time>
 [8] <time class="">vor 23 Stunden</time>
 [9] <time class="">vor 1 Woche</time>
[10] <time class="">vor 1 Tag</time>
[11] <time class="">vor 2 Tagen</time>
[12] <time class="">vor 1 Tag</time>
[13] <time class="">vor 6 Tagen</time>
[14] <time class="">vor 2 Tagen</time>
[15] <time class="">vor 2 Tagen</time>
[16] <time class="">vor 2 Tagen</time>
[17] <time class="">vor 2 Tagen</time>
[18] <time class="">vor 6 Tagen</time>
[19] <time class="">vor 1 Woche</time>
[20] <time class="">vor 1 Woche</time>