【发布时间】:2018-02-23 17:06:30
【问题描述】:
下面的代码在交互模式下可以正常工作,但在函数中使用时会失败。这很简单,两个身份验证POST 命令,然后是数据下载。我的目标是让它在一个函数中工作,而不仅仅是在交互模式下。
这个问题有点像this question.. icpsr 最近更新了他们的网站。下面的最小可复制示例需要一个免费帐户,可在
我尝试添加Sys.sleep(1) 和各种httr::GET/httr::POST 调用,但没有任何效果。
my_download <-
function( your_email , your_password ){
values <-
list(
agree = "yes",
path = "ICPSR" ,
study = "21600" ,
ds = "" ,
bundle = "rdata",
dups = "yes",
email=your_email,
password=your_password
)
httr::POST("https://www.icpsr.umich.edu/cgi-bin/terms", body = values)
httr::POST("https://www.icpsr.umich.edu/rpxlogin", body = values)
tf <- tempfile()
httr::GET(
"https://www.icpsr.umich.edu/cgi-bin/bob/zipcart2" ,
query = values ,
httr::write_disk( tf , overwrite = TRUE ) ,
httr::progress()
)
}
# fails
my_download( "email@address.com" , "some_password" )
# stepping through works
debug( my_download )
my_download( "email@address.com" , "some_password" )
EDIT 失败只是下载此页面,就好像没有登录(而不是数据集)一样,因此由于某种原因它失去了身份验证。如果您已登录 icpsr,请使用隐私浏览查看页面--
https://www.icpsr.umich.edu/cgi-bin/bob/zipcart2?study=21600&ds=1&bundle=rdata&path=ICPSR
谢谢!
【问题讨论】:
-
那么当通过函数使用时它在哪里/如何失败?
-
@RolandASc 很抱歉没有包括在内。见编辑..谢谢
-
icpsr.umich.edu/robots.txt 表明此活动未经授权(并且
robots.txt目前是在 - 至少在美国 - 民事法庭上维护的善意技术控制)。除非有自动访问的书面许可,否则不要追求这一点。 -
我建议忽略@hrbrmstr 对 robots.txt 的担忧。至少尚不清楚 a) 您的脚本是否符合“机器人”的条件,或 b) 遵守 robots.txt 中指定的限制一定是个好主意。请参阅en.wikipedia.org/wiki/Robots_exclusion_standard,了解有关此问题的相对公正的信息。
-
对我来说第二次运行该功能是可行的。所以这不是关于逐行运行它,而是它是否以前运行过。实际上:只需运行两次。
标签: r cookies https web-scraping httr