Я пытаюсь получить текст с веб-страницы. Чтобы упростить мой вопрос, позвольте мне использовать учетную запись @RonakShah Stackoverflow в качестве примера для извлечения значения репутации. Когда "SelectorGadget" показывает "div, div", я использовал следующий код:

library(rvest)
so <- read_html('https://stackoverflow.com/users/3962914/ronak-shah') %>%
  html_nodes("div") %>% html_nodes("div") %>% html_text()

Это дало объекту so целых 307 элементов.

Затем я превратил объект в фрейм данных:

so <- as.data.frame(so)
view(so)

Затем вручную перебрал все элементы в фрейме данных, пока не нашел правильное значение so$so[69]. У меня вопрос, как быстро найти конкретное целевое значение. В моем реальном случае это немного сложнее сделать вручную, так как есть несколько элементов с одинаковыми значениями, и мне нужно определить правильный порядок. Спасибо.

1
Zhiqiang Wang 2 Мар 2021 в 10:53

1 ответ

Лучший ответ

Вам нужно найти конкретный тег и соответствующий класс ближе к вашей цели. Вы можете найти это с помощью гаджета селектора.

library(rvest)

read_html('https://stackoverflow.com/users/3962914/ronak-shah') %>%
  html_nodes("div.grid--cell.fs-title") %>%
  html_text() 

#[1] "254,328"

Что касается парсинга StackOverflow, у него есть API для получения информации о пользователях / вопросах / ответах. В R есть пакет-оболочка под названием stackr (не в CRAN), что очень упрощает .

library(stackr)
data <- stack_users(3962914)
data$reputation
[1] 254328

data также содержит много другой информации о пользователе.

3962914 - это идентификатор интересующего вас пользователя, который можно узнать по ссылке в его профиле. (https://stackoverflow.com/users/3962914/ronak-shah).

1
Ronak Shah 2 Мар 2021 в 08:15