xml - 在 R 中抓取受密码保护的网站

标签 xml r web-scraping rcurl httr

我正在尝试从 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"))

我查看了其他相关帖子(下面的链接),但无法弄清楚如何将他们的答案应用到我的案例中。

How to use R to download a zipped file from a SSL page that requires cookies

How to webscrape secured pages in R (https links) (using readHTMLTable from XML package)?

Reading information from a password protected site

R - RCurl scrape data from a password-protected site

http://www.inside-r.org/questions/how-scrape-data-password-protected-https-website-using-r-hold

最佳答案

您可以使用 RSelenium。我使用了开发版本,因为您可以在没有 Selenium 服务器的情况下运行 phantomjs

# 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 调用。

关于xml - 在 R 中抓取受密码保护的网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24723606/

相关文章:

javascript - UI5 删除重复的提要列表项

Python lxml 电子工厂

java - 使用XStream读取XML对象时,如果我不知道XML有多少个字段怎么办?

xml - 使用 XSLT 合并和重组 XML 文件

r - 根据大小向 ggplot2 geom_tile 图添加图例

c# - System.Windows.Forms.WebBrowser 等待页面完全加载

r - 迭代地将新列添加到数据框列表中

R - 生成具有重复项的唯一列表序列

vba - 使用 Excel vba 抓取网站

html - 如何使用 R 从 iframe 的输入标签中抓取数据