Проблема выбора правильных элементов CSS для очистки с помощью Rvest - PullRequest
0 голосов
/ 14 октября 2018

ЦЕЛЬ: Я пытаюсь почистить рекорды побед и поражений для команд НБА из Basketball.reference.com.

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

URL-адрес, который я использую (https://www.basketball -reference.com / leagues / NBA_2018_standings.html) имеет несколько таблиц, поэтому я пытаюсь использовать гаджет селектора CSS, чтобы указать нужный элемент, который является таблицей «Расширенные стандарты» - примерно на 1/3 пути вниз по странице.

Я читал различные учебные пособия по очистке веб-страниц, включающие пакеты rvest и dplyr, а также надстройку для веб-браузера для селектора CSS (которую я установил в Chrome, моем любимом браузере).Вот к чему я иду.

Вот мой код:

url <- "https://www.basketball-reference.com/leagues/NBA_2018_standings.html"
css <- "#expanded_standings"

url %>%
  read_html() %>%
  html_nodes(css) %>%
  html_table()

Результатом этого кода является ошибка:

Error: html_name(x) == "table" is not TRUE

Когда яудалить последнюю строку кода, я получаю:

url %>%
  read_html() %>%
  html_nodes(css)

{xml_nodeset (0)}

Кажется, есть проблема с тем, как я определяю объект CSS / как я использую инструмент выбора CSS.Я просто щелкнул по правому краю нужной таблицы, чтобы вокруг нее был прямоугольник.

Я также пытался щелкнуть конкретную «ячейку» в таблице (то есть, «65-17», что является значением в столбце «Общий» для строки «Хьюстон Рокетс»), но, кажется, выделяет некоторые, но не всю таблицу, и случайные части других таблиц на веб-странице..

Кто-нибудь может предложить решение? Бонусные баллы, если вы можете помочь мне понять, где / почему то, что я делаю, неправильно.

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 15 октября 2018
library(rvest)
library(dplR)
library(stringr)
library(magrittr)

url <- "https://www.basketball-reference.com/leagues/NBA_2018_standings.html"
css <- "#expanded_standings"
css <- "#all_expanded_standings"

webpage <- read_html(url)
print(webpage)
mynode <- html_nodes(webpage,css)
#print node to console - interprets slashes
cat(toString(mynode))
0 голосов
/ 15 октября 2018
library(rvest)
library(dplR)
library(stringr)
library(magrittr)

url <- "https://www.basketball-reference.com/leagues/NBA_2018_standings.html"
css <- "#expanded_standings"
css <- "#all_expanded_standings"

webpage <- read_html(url)
print(webpage)
mynode <- html_nodes(webpage,css)

mystr <- toString(mynode)
mystr <- gsub("<!--","",mystr)
mystr <- gsub("-->","",mystr)

newdiv <- read_html(mystr)

newtable <- html_nodes(newdiv,"#expanded_standings")
newframe <- html_table(newtable)

print(newframe)
0 голосов
/ 14 октября 2018

Я попытался загрузить HTML-код с чистым URL (до рендеринга javascript).Кажется странным, как данные таблицы находятся в блоке комментариев.В этом div - таблица «Расширенные стандарты».

Я использовал python и beautifulsoup, чтобы извлечь элемент, а затем удалить маркеры комментария, повторно разделить строку и затем проанализировать строку в битах td.Странно, как звание в элементе th.

...