从 stats.nba.com 抓取数据,curl::curl_fetch_memory(url, handle = handle) 中出现错误
Posted
技术标签:
【中文标题】从 stats.nba.com 抓取数据,curl::curl_fetch_memory(url, handle = handle) 中出现错误【英文标题】:Scraping data from stats.nba.com, Getting Error in curl::curl_fetch_memory(url, handle = handle) 【发布时间】:2020-01-10 20:50:36 【问题描述】:我想从 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
我还在网站上使用自定义高级过滤器进行了尝试,这会导致相同的错误或代码永远运行。我在网络抓取方面不是很好,所以如果有人能指出这里的问题,我将不胜感激。
【问题讨论】:
【参考方案1】:我已经看得很清楚了。看起来这个网站做了一些努力来防止抓取,并且不会给你来自那个 url 的 json,除非你向它提供由浏览器的 javascript 和它们自己的服务器之间来回生成的 cookie。他们还使用 New Relic 技术监控请求时间,因此如果您抓取多个页面,可能会阻止您的 IP。这并非不可能,但非常非常困难。
如果您迫切需要数据,您可以使用 NBA API 查看数据,这需要注册,但我们每天可以免费使用 1000 个请求。
另一个选项是使用 RSelenium 自动化浏览器以获取完全呈现页面的 html。
当然,如果你只想要这一页,你可以从 Chrome 的检查器中复制 html,然后使用rvest::read_html(readClipboard())
【讨论】:
非常感谢您花时间研究它。我现在正在查看一个名为 nba_api for python 的 repo。到目前为止它看起来很有希望,我想我可以让它工作(我对 Python 不太熟练,所以可能需要一些时间)。以上是关于从 stats.nba.com 抓取数据,curl::curl_fetch_memory(url, handle = handle) 中出现错误的主要内容,如果未能解决你的问题,请参考以下文章