Как я могу очистить эти данные?

Я хочу очистить статистику с этой страницы:

url <- "http://www.pgatour.com/players/player.20098.stuart-appleby.html/statistics"

В частности, я хочу получить данные из таблицы под снимком головы Стюарта. Он озаглавлен «Стюарт Эпплби - СТАТИСТИКА PGA TOUR 2015».

Я пытаюсь использовать rvest в сочетании с гаджетом выбора (http://selectorgadget.com/).

url_html <- url %>% html()
url_html %>% 
        html_nodes(xpath = '//*[(@id = "playerStats")]//td')

«Должен ли» получить таблицу без, например, строки вверху, которая гласит: «Обзор — Ранг — Дополнительная статистика».

url_html <- url %>% html()
url_html %>% 
    html_nodes(xpath = '//*[(@id = "playerStats")] | //th//*[(@id = "playerStats")]//td') 

«Должен» дать мне таблицу со строкой «Обзор — Ранг — Добавить статистику».

Ни то, ни другое.

Очевидно, я полный новичок, когда дело доходит до парсинга веб-страниц. Когда я нажимаю «просмотреть источник» для этой веб-страницы, данные, содержащиеся в таблице, отсутствуют.

В исходном коде, где думаю должна начинаться таблица, есть такой фрагмент кода:

<script id="playerStatsTourTemplate" type="text/x-jquery-tmpl">
    {{each(t, tour) tours}}
        {{if pgatour.players.shouldProcessTour(tour.tourCodeLC)}}
        <div class="statistics-head">
            <h2 class="title">Stuart&nbsp;Appleby - <b>${year} STATS 
.
.
.

Итак, похоже, что таблица хранится где-то (Json? Jquery? Javascript? Применимы ли эти термины здесь?), Который не доступен для функции html(). Есть ли способ использовать rvest для получения этих данных? Существует ли эквивалент rvest для захвата данных, которые хранятся таким образом?

Спасибо.


person hossibley    schedule 08.04.2015    source источник
comment
Любой, кто помогает вам, нарушает их ToC - You shall not use or permit or facilitate others to use PGATOUR.com by automated electronic processes, robots, spiders, scrapers, webcrawlers, or other computer programs that monitor, copy or download data or other content found on or accessed through PGATOUR.com, including without limitation real time scoring, video, audio, statistics, polling, or data content, whether current or archival.   -  person hrbrmstr    schedule 08.04.2015


Ответы (2)


Я бы, вероятно, использовал запрос GET, который делает страница, чтобы получить необработанные данные из своего API и работать над их синтаксическим анализом...

content(a) дает вам представление списка... в основном вывод из fromJSON()
или
as(a, "character") дает вам необработанный JSON

library("httr")
a <- GET("http://www.pgatour.com/data/players/20098/2014stat.json")
content(a)
as(a, "character")
person cory    schedule 08.04.2015
comment
Спасибо! Вопрос: Как вы обнаружили URL http://www.pgatour.com/data/players/20098/2014stat.json? - person hossibley; 09.04.2015
comment
В хроме... щелкните правой кнопкой мыши, проверьте элемент. Затем щелкните вкладку сети. Затем измените годы, используя раскрывающийся список на веб-странице, и следите за новыми записями на вкладке сети. - person cory; 09.04.2015
comment
Спасибо! На самом деле я не мог щелкнуть раскрывающийся список в течение года после того, как щелкнул правой кнопкой мыши › проверить › сеть. Я могу щелкнуть раскрывающийся список для игрока, но не для года. Кроме того, когда я делаю раскрывающийся список для игрока, на вкладке сети появляется множество новых записей. У вас есть метод просеивания через них, чтобы выбрать важные? - person hossibley; 21.04.2015
comment
Те, которые являются записями GET или POST, — это те, которые вы должны ввести. Иногда вам нужно проверять заголовки и копировать их для POST, но GET обычно просты, как указано выше... - person cory; 22.04.2015

Проверь это.

Проект с открытым исходным кодом на GitHub, очищающий данные PGA: https://github.com/zachwill/golf/blob/master/pga.py

person koxon    schedule 26.07.2015