Ant*_*ico 19 curl r web-scraping rcurl httr
我正在为http://asdfree.com/编写一组可自由下载的R脚本,以帮助人们分析英国数据服务托管的复杂样本调查数据.除了为这些数据集提供大量统计教程之外,我还想自动下载和导入此调查数据.为了做到这一点,我需要弄清楚如何以编程方式登录这个英国数据服务网站.
我已经尝试了许多不同的RCurl和httr配置来登录,但是我在某个地方犯了一个错误而且我被卡住了.我已经尝试检查这篇文章中概述的元素,但网站在浏览器中跳得太快,让我无法理解发生了什么.
这个网站确实需要登录名和密码,但我相信在进入登录页面之前我犯了一个错误.
起始页应为:https://www.esds.ac.uk/secure/UKDSRegister_start.asp
此页面将自动将您的Web浏览器重定向到以以下内容开头的长URL: https://wayf.ukfederation.org.uk/DS002/uk.ds?[blahblahblah]
(1)由于某种原因,SSL证书在本网站上不起作用.这是我发布的有关此问题的SO问题.我使用的解决方法是忽略SSL:
library(httr)
set_config( config( ssl.verifypeer = 0L ) )
Run Code Online (Sandbox Code Playgroud)
然后我在起始网站上的第一个命令是:
z <- GET( "https://www.esds.ac.uk/secure/UKDSRegister_start.asp" )
Run Code Online (Sandbox Code Playgroud)
这给了我一个z$url看起来很像https://wayf.ukfederation.org.uk/DS002/uk.ds?[blahblahblah]我的浏览器也重定向的页面.
然后,在浏览器中,您应该输入"英国数据存档"并单击continue按钮.当我这样做时,它会将我重定向到网页https://shib.data-archive.ac.uk/idp/Authn/UserPassword
我认为这是我被困的地方,因为我无法弄清楚如何followlocation在这个网站上获得cURL 和土地.注意:尚未输入用户名/密码.
当我使用wayf.ukfederation.org.uk页面中的httr GET命令时,如下所示:
y <- GET( z$url , query = list( combobox = "https://shib.data-archive.ac.uk/shibboleth-idp" ) )
Run Code Online (Sandbox Code Playgroud)
该y$url字符串看起来很像z$url(除非它有一个下拉框=上年底).有没有办法通过RCurl或httr进入此uk data archive身份验证页面?
我不知道我是否只是忽略了某些东西,或者我是否绝对必须使用我以前的SO帖子中描述的SSL证书或者什么?
(2)在我完成该页面的那一点上,我相信代码的其余部分将是:
values <- list( j_username = "your.username" ,
j_password = "your.password" )
POST( "https://shib.data-archive.ac.uk/idp/Authn/UserPassword" , body = values)
Run Code Online (Sandbox Code Playgroud)
但我想那页必须等待......
表单返回的相关数据变量是actionand origin、 not combobox。给出action值selection以及origin相关条目中的值combobox
y <- GET( z$url, query = list( action="selection", origin = "https://shib.data-archive.ac.uk/shibboleth-idp") )
> y$url
[1] "https://shib.data-archive.ac.uk:443/idp/Authn/UserPassword"
Run Code Online (Sandbox Code Playgroud)
编辑
看起来句柄池没有使您的会话正确保持活动状态。因此,您需要直接传递句柄,而不是自动传递。另外,POST您还需要设置命令,multipart=FALSE因为这是HTML 表单的默认命令。R 命令有不同的默认值,因为它主要用于上传文件。所以:
y <- GET( handle=z$handle, query = list( action="selection", origin = "https://shib.data-archive.ac.uk/shibboleth-idp") )
POST(body=values,multipart=FALSE,handle=y$handle)
Response [https://www.esds.ac.uk/]
Status: 200
Content-type: text/html
...snipped...
<title>
Introduction to ESDS
</title>
<meta name="description" content="Introduction to the ESDS, home page" />
Run Code Online (Sandbox Code Playgroud)