Веб-парсинг в r с помощью rvest: если div отсутствует, верните NA - PullRequest
1 голос
/ 12 июля 2020

Я пытаюсь очистить всплывающую подсказку для четырех блоков: стрелять-тип, выдувать, время и стрелять-xg. Иногда один из div отсутствует. Например, в приведенном ниже [2] нет элемента div "tooltip-shoot-xg".

Как мне циклически пройти через div.tooltip и вернуть NA, если какой-либо из четырех компонентов отсутствует?

[1] "<div class=\"tooltip\" style=\"left: 37.5%; top: 36.5789%;\">\n<div class=\"tooltip-title\">\n<div class=\"tooltip-shoot-type\">Shot blocked</div>\n<div class=\"tooltip-blow-type\">Smith </div>\n<div class=\"tooltip-shoot-name\"></div>\n</div>\n<div class=\"tooltip-time\">a </div>\n<div class=\"tooltip-time\">Half 1, 09:18 28/01/18</div>\n<div class=\"tooltip-shoot-xg\">Expected goals: 0.09</div>\n</div>"

[2] "<div class=\"tooltip\" style=\"left: 54.7059%; top: 11.0526%;\">\n<div class=\"tooltip-title\">\n<div class=\"tooltip-shoot-type\">Own goal</div>\n<div class=\"tooltip-blow-type\">Johnson </div>\n<div class=\"tooltip-shoot-name\"></div>\n</div>\n<div class=\"tooltip-time\">h </div>\n<div class=\"tooltip-time\">Half 1, 14:36 28/01/18</div>\n</div>"

Это результат

pg %>% 
  html_nodes("div.tooltip")

1 Ответ

0 голосов
/ 13 июля 2020

Если вы используете селектор XPath, точка (.) представляет текущий узел, и вы можете найти дочерние элементы относительно него. В этом примере код выглядит следующим образом:

divs <- pg %>% html_nodes("div.tooltip")
for (i in 1:length(divs)){
  shoot-type <- divs[i] %>% html_node(xpath = "./div[@class='tooltip-shoot-type']") %>% html_text()
  blow-type <- divs[i] %>% html_node(xpath = "./div[@class='tooltip-blow-type']") %>% html_text()
  time <- divs[i] %>% html_node(xpath = "./div[@class='tooltip-time']") %>% html_text()
  shoot-xg <- divs[i] %>% html_node(xpath = "./div[@class='tooltip-shoot-xg']") %>% html_text()
  # add code here to save data
}

Тогда, если в узле нет tooltip-shoot-xg class div, shoot-xg вернет NA.

...