Получить свойство href для каждой строки таблицы, используя rvest - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь извлечь все ссылки для таблицы, которая выглядит примерно так:

<!DOCTYPE html>
<html>
<body>

<table>
  <tr>
    <td>
      <a href="https://www.r-project.org/">R</a><br>
      <a href="https://www.rstudio.com/">RStudio</a>
    </td>
  </tr>
  <tr>
    <td>
      <a href="https://community.rstudio.com/">Rstudio Community</a>
    </td>
  </tr>
</table>

</body>
</html>

Что я хотел бы сделать, это получить список фреймов данных (или вектора) в конце, где каждый фрейм данных содержит все ссылки для каждой строки в таблице html. Например, в этом случае список будет иметь вектор 1 с c("https://www.r-project.org/","https://www.rstudio.com/"), а второй вектор будет c("https://community.rstudio.com/"). Основная проблема, с которой я сталкиваюсь сейчас, заключается в том, что я не могу сохранить отношение href к каждому узлу, когда я делаю следующее:

library(rvest)

web <- read_html("table.html") %>%
  html_nodes("table") %>%
  html_nodes("tr") %>%
  html_nodes("a") %>%
  html_attr("href")

1 Ответ

0 голосов
/ 26 апреля 2018

Одним из способов было бы добавить в поиск замену термина "a" на html_node, что приведет к созданию списка только первого URL в каждом tr. Затем вы можете использовать это, чтобы разбить полный список на группы.

page <- read_html("table.html") #just read the html once

web <- page %>%
  html_nodes("table") %>% html_nodes("tr") %>% html_nodes("a") %>%
  html_attr("href") #as above

web2 <- page %>%
  html_nodes("table") %>% html_nodes("tr") %>% html_node("a") %>%
  html_attr("href") #just the first url in each tr

webdf <- data.frame(web=web, #full list
                    group=cumsum(web %in% web2), #grouping indicator by tr
                    stringsAsFactors=FALSE)

webdf
                             web group
1     https://www.r-project.org/     1
2       https://www.rstudio.com/     1
3 https://community.rstudio.com/     2
...