Очистка данных от stats.nba.com, Ошибка получения в curl :: curl_fetch_memory (url, handle = handle) - PullRequest
0 голосов
/ 10 января 2020

Я хотел бы получить расширенную статистику команды от stats.nba.com.

Мой текущий код для получения файла XHR, в котором хранятся данные:

library(httr)
library(jsonlite)


nba <- GET('https://stats.nba.com/stats/leaguedashteamstats?Conference=&DateFrom=11%2F12%2F2019&DateTo=&Division=&GameScope=&GameSegment=&LastNGames=0&LeagueID=00&Location=&MeasureType=Advanced&Month=0&OpponentTeamID=0&Outcome=&PORound=0&PaceAdjust=N&PerMode=PerGame&Period=0&PlayerExperience=&PlayerPosition=&PlusMinus=N&Rank=N&Season=2019-20&SeasonSegment=&SeasonType=Regular+Season&ShotClockRange=&StarterBench=&TeamID=0&TwoWay=0&VsConference=&VsDivision=')

I получить URL с помощью этих шагов в Chrome: Проверка -> Сеть -> XHR

Код выдает эту ошибку:

Error in curl::curl_fetch_memory(url, handle = handle) : 
  LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 60

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

1 Ответ

2 голосов
/ 11 января 2020

Я хорошо посмотрел на это. Похоже, что этот сайт делает все возможное, чтобы предотвратить удаление, и он не даст вам json из этого URL, если вы не предоставите ему файлы cookie, которые сгенерированы в обратном направлении между javascript вашего браузера и их собственные серверы. Они также отслеживают время запроса с помощью новой технологии Reli c и поэтому могут заблокировать ваш IP, если вы очистите несколько страниц. Это было бы невозможно, но очень, очень сложно.

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

Другой вариант - автоматизировать браузер, используя RSelenium, для получения html полностью отрисованных страниц.

Конечно, если вам нужна только одна эта страница, вы можете просто скопировать html от вашего Chrome инспектора, затем используйте rvest::read_html(readClipboard())

...