如何构造httr POST请求以返回站点数据?
我无法从以下网站获取数据。如果我通过浏览器访问long_url,我可以看到我想要刮取的表,但是如果我使用httr从R中调用url,我要么没有得到返回给我的数据,要么我不理解它是如何返回给我的如何构造httr POST请求以返回站点数据?,r,http-post,httr,R,Http Post,Httr,我无法从以下网站获取数据。如果我通过浏览器访问long_url,我可以看到我想要刮取的表,但是如果我使用httr从R中调用url,我要么没有得到返回给我的数据,要么我不理解它是如何返回给我的 base_url <- "http://web1.ncaa.org/stats/exec/records" long_url <- "http://web1.ncaa.org/stats/exec/records?academicYear=2014&sportCode=MFB&o
base_url <- "http://web1.ncaa.org/stats/exec/records"
long_url <- "http://web1.ncaa.org/stats/exec/records?academicYear=2014&sportCode=MFB&orgId=721"
library(XML)
library(httr)
library(rvest) # devtools::install_github("hadley/rvest")
base\u url您在这里遇到的问题实际上是一个非常常见的问题httr
使用RCurl
进行重型起重。RCurl
在GET或POST请求中发送的默认用户代理头是NULL
,这经常会混淆脚本。这就是为什么您的浏览器和httr(…)
会得到不同的结果。如果你欺骗了一个有意义的用户代理,你就会得到你想要的结果
base_url <- "http://web1.ncaa.org/stats/exec/records"
ua <- "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0"
library(httr)
library(XML)
doc <- POST(base_url,
query = list(academicYear = "2014", sportCode = "MFB",orgId = "721"),
user_agent(ua))
html <- content(doc, useInternalNodes=T)
df.list <- readHTMLTable(html)
df <- df.list[[4]]
head(df)
# Opponent Game Date Air ForceScore OppScore Loc Neutral SiteLocation GameLength Attend
# 1 Colgate 08/31/2013 38 13 Home - 32,095
# 2 Utah St. 09/07/2013 20 52 Home - 32,716
# 3 Boise St. 09/13/2013 20 42 Away - 36,069
# 4 Wyoming 09/21/2013 23 56 Home - 35,389
# 5 Nevada 09/28/2013 42 45 Away - 24,545
# 6 Navy 10/05/2013 10 28 Away - 38,225
base\u url FYI httr确实设置了用户代理。@hadley真的吗?为了什么?在这种情况下,您知道为什么OP的代码不起作用,但显式设置用户代理会起作用吗?它会将其设置为类似于httr/RCurl/R
,因此如果服务器正在进行UA嗅探,则它与已知的任何内容都不匹配。
table <- html_nodes(doc, css = "td")
table <- readHTMLTable(doc)
base_url <- "http://web1.ncaa.org/stats/exec/records"
ua <- "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0"
library(httr)
library(XML)
doc <- POST(base_url,
query = list(academicYear = "2014", sportCode = "MFB",orgId = "721"),
user_agent(ua))
html <- content(doc, useInternalNodes=T)
df.list <- readHTMLTable(html)
df <- df.list[[4]]
head(df)
# Opponent Game Date Air ForceScore OppScore Loc Neutral SiteLocation GameLength Attend
# 1 Colgate 08/31/2013 38 13 Home - 32,095
# 2 Utah St. 09/07/2013 20 52 Home - 32,716
# 3 Boise St. 09/13/2013 20 42 Away - 36,069
# 4 Wyoming 09/21/2013 23 56 Home - 35,389
# 5 Nevada 09/28/2013 42 45 Away - 24,545
# 6 Navy 10/05/2013 10 28 Away - 38,225