我正在尝试从 R 中受密码保护的网站中抓取数据。通过阅读,httr 和 RCurl 包似乎是使用密码身份验证进行抓取的最佳选择(我还研究了 XML 包)。
我试图抓取的网站如下(您需要一个免费帐户才能访问完整页面):http://subscribers.footballguys.com/myfbg/myviewprojections.php?projector=2
这是我的两次尝试(用我的用户名替换“用户名”,用我的密码替换“密码”):
#This returns "Status: 200" without the data from the page:
library(httr)
GET("http://subscribers.footballguys.com/myfbg/myviewprojections.php?projector=2", authenticate("username", "password"))
#This returns the non-password protected preview (i.e., not the full page):
library(XML)
library(RCurl)
readHTMLTable(getURL("http://subscribers.footballguys.com/myfbg/myviewprojections.php?projector=2", userpwd = "username:password"))
我看过其他相关帖子(下面的链接),但不知道如何将他们的答案应用于我的案例。
如何使用 R 从需要 cookie 的 SSL 页面下载压缩文件
如何在 R 中抓取受保护的页面(https 链接)(使用 XML 包中的 readHTMLTable)?
从受密码保护的站点读取信息
R - RCurl 从受密码保护的网站抓取数据
http://www.inside-r.org/questions/how-scrape-data-password-protected-https-website-using-r-hold
您可以使用RSelenium。我用的是dev版本,你可以运行phantomjs
没有 Selenium 服务器。
# Install RSelenium if required. You will need phantomjs in your path or follow instructions
# in package vignettes
# devtools::install_github("ropensci/RSelenium")
# login first
appURL <- 'http://subscribers.footballguys.com/amember/login.php'
library(RSelenium)
pJS <- phantom() # start phantomjs
remDr <- remoteDriver(browserName = "phantomjs")
remDr$open()
remDr$navigate(appURL)
remDr$findElement("id", "login")$sendKeysToElement(list("myusername"))
remDr$findElement("id", "pass")$sendKeysToElement(list("mypass"))
remDr$findElement("css", ".am-login-form input[type='submit']")$clickElement()
appURL <- 'http://subscribers.footballguys.com/myfbg/myviewprojections.php?projector=2'
remDr$navigate(appURL)
tableElem<- remDr$findElement("css", "table.datamedium")
res <- readHTMLTable(header = TRUE, tableElem$getElementAttribute("outerHTML")[[1]])
> res[[1]][1:5, ]
Rank Name Tm/Bye Age Exp Cmp Att Cm% PYd Y/Att PTD Int Rsh Yd TD FantPt
1 1 Peyton Manning DEN/4 38 17 415 620 66.9 4929 7.95 43 12 24 7 0 407.15
2 2 Drew Brees NO/6 35 14 404 615 65.7 4859 7.90 37 16 22 44 1 385.35
3 3 Aaron Rodgers GB/9 31 10 364 560 65.0 4446 7.94 33 13 52 224 3 381.70
4 4 Andrew Luck IND/10 25 3 366 610 60.0 4423 7.25 27 13 62 338 2 361.95
5 5 Matthew Stafford DET/9 26 6 377 643 58.6 4668 7.26 32 19 34 102 1 358.60
最后当你完成关闭时phantomjs
pJS$stop()
如果您想使用传统浏览器,例如 Firefox(如果您想坚持使用 CRAN 上的版本),您可以使用:
RSelenium::startServer()
remDr <- remoteDriver()
........
........
remDr$closeServer()
代替相关的phantomjs
calls.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)