18

R でパスワードで保護された Web サイトからデータをスクレイピングしようとしています。いろいろ読んでみると、パスワード認証を使用してスクレイピングするには、httr および RCurl パッケージが最適なオプションのようです (XML パッケージも調べました)。

私がスクレイピングしようとしている Web サイトは次のとおりです (ページ全体にアクセスするには、無料のアカウントが必要です): http://subscribers.footballguys.com/myfbg/myviewprojections.php?projector=2

これが私の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 ページから zip ファイルをダウンロードする方法

Rで保護されたページ(httpsリンク)をWebスクレイピングする方法(XMLパッケージのreadHTMLTableを使用)?

パスワードで保護されたサイトからの情報の読み取り

R - RCurl は、パスワードで保護されたサイトからデータをスクレイピングします

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

4

2 に答える 2

18

RSelenium を使用できます。phantomjsSelenium Server なしで実行できるので、dev バージョンを使用しました。

# 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呼び出しの代わりに。

于 2014-07-13T16:22:59.457 に答える