r - 从 stats.nba.com 抓取数据,在 curl::curl_fetch_memory(url, handle = handle) 中获取错误

标签 r json ssl web-scraping

我想从 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=')

我在 Chrome 中通过以下步骤获取了 URL: 检查 -> 网络 -> XHR

代码抛出这个错误:

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

我还在网站上使用自定义高级过滤器进行了尝试,这要么导致相同的错误,要么导致代码永远运行。我不太擅长网络抓取,所以如果有人能指出这里的问题,我将不胜感激。

最佳答案

我已经仔细研究过了。看起来这个网站竭尽全力防止抓取,并且不会给你来自该网址的 json,除非你向它提供由浏览器的 javascript 和他们自己的服务器之间来回生成的 cookie。他们还使用 New Relic 技术监控请求时间,因此如果您抓取多个页面,他们可能会阻止您的 IP。这并非不可能,但非常非常困难。

如果您迫切需要可以使用 NBA API 查找的数据这需要注册,但我们每天可以免费使用 1000 个请求。

另一种选择是使用 RSelenium 自动化浏览器以获取完全呈现页面的 html。

当然,如果你只想要这一页,你可以从你的 Chrome 检查器中复制 html,然后使用 rvest::read_html(readClipboard())

关于r - 从 stats.nba.com 抓取数据,在 curl::curl_fetch_memory(url, handle = handle) 中获取错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59688838/

相关文章:

r - 更改多个列表的列表元素名称

ssl - simplehtmldom - SSL 操作失败,代码为 1。OpenSSL 错误消息

R:使用具有重复数的列表的稳健线性回归

r - 子集 R 中的列表向量

r - 使用 R 进行多重对应分析

c++ - 将字符串输入 RapidJson 以输出 JSON

java - 在 Play 2.4.x 中返回 JSON 404 错误

json - 如何以可重用的方式使用kotlin比较使用键属性的2个Json对象文件?

java - JSOUP 如何使用 HTTPS 自签名认证登录

ssl - 内联网上的 HTTPS,正确的做法是什么