2016-10-22 3 views
5

Я пытаюсь очистить страницу на веб-сайте, где требуется логин, и я получаю ошибку 403.403 Ошибка при использовании Rvest для входа на сайт для скрепок

Я изменил код из этих 2-х сообщений для моего сайта, Using rvest or httr to log in to non-standard forms on a webpage и how to reuse a session to avoid repeated login when scraping with rvest?

library(rvest) 
pgsession <- html_session("https://www.optionslam.com/earnings/stocks/MSFT?page=-1") 
pgform <- html_form(pgsession)[[1]] 
filled_form <- set_values(pgform, 'username'='user', 'password'='pass') 
s <- submit_form(pgsession, filled_form) # s is your logged in session 

Когда код запускается, я получаю сообщение:

Submitting with 'NULL' 
Warning message: 
In request_POST(session, url = url, body = request$values, encode = request$encode, : 
    Forbidden (HTTP 403). 

Я также запустить кода таким образом, обновив user_agent как RS Однако в комментариях я получаю ту же ошибку, что и выше.

library(rvest) 
library(httr) 
uastring <- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36" 
pgsession <- html_session("https://www.optionslam.com/earnings/stocks/MSFT?page=-1", user_agent(uastring)) 
pgform <- html_form(pgsession)[[1]] 
filled_form <- set_values(pgform, 'username'='user', 'password'='pass') 
s <- submit_form(pgsession, filled_form) # s is your logged in session 

Если потянуть страницу без входа в систему, он показывает вам немного таблицы данных в правом нижнем углу под текстом: «Доходы События Доступно: 65»

После входа в систему, это покажет все 65 событий, и таблица будет заполнена, и это то, что я хочу загрузить. У меня есть весь код, необходимый для этого, но я застрял только в части входа.

Благодарим за помощь.

+1

'submit_form не должен (pgsession, pgform)' 'быть submit_form (pgsession, filled_form)' –

+0

вы пробовали установки/изменения пользовательского -agent? Edit: И вам определенно нужно вызвать submit_form с fill_form, так как @Chirayu говорит –

+0

@ChirayuChamoli, я обновил указанную вами ошибку, а также полученное сообщение об ошибке. Спасибо, что указал на мою первую ошибку. – mks212

ответ

4

Используя предложение R.S., я использовал RSelenium для успешного входа в систему.

Быстрая заметка для других пользователей Mac по использованию либо хрома, либо фантома. Я запускаю El Capitan, поэтому возникла проблема с тем, чтобы mac распознавал пути к обоим файлам bin. Вместо этого я переместил файлы bin в/usr/local/bin, и они бежали без проблем.

Ниже приведен код, чтобы сделать это:

library(RSelenium) 
RSelenium::startServer() 
remDr <- remoteDriver(browserName = "chrome") 
remDr$open() 
appURL <- 'https://www.optionslam.com/accounts/login/' 
remDr$navigate(appURL) 
remDr$findElement("id", "id_username")$sendKeysToElement(list("user")) 
remDr$findElement("id", "id_password")$sendKeysToElement(list("password", key='enter')) 

appURL <- 'https://www.optionslam.com/earnings/stocks/MSFT?page=-1' 
remDr$navigate(appURL) 

Это также можно сделать с помощью фантома,

library(RSelenium) 

pJS <- phantom() # start phantomjs 

appURL <- 'https://www.optionslam.com/accounts/login/' 
remDr <- remoteDriver(browserName = "phantomjs") 
remDr$open() 
remDr$navigate(appURL) 
remDr$findElement("id", "id_username")$sendKeysToElement(list("user")) 
remDr$findElement("id", "id_password")$sendKeysToElement(list("password", key='enter')) 

appURL <- 'https://www.optionslam.com/earnings/stocks/MSFT?page=-1' 
remDr$navigate(appURL) 
+1

Рад видеть, что вы смогли решить проблему. –

0

Вот ответ, чтобы решить эту проблему в первоначальном варианте использования с rvest:

library(rvest) 
    library(httr) 
    uastring <- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36" 

    pgsession <- html_session("https://www.optionslam.com/earnings/stocks/MSFT?page=-1", user_agent(uastring)) 

    pgform <- html_form(pgsession)[[1]] 

    filled_form <- set_values(pgform, 
          username = 'un', 
          password = 'ps') 

    s <- submit_form(pgsession, filled_form, submit = NULL, config(referer = pgsession$url)) # s is your logged in session 

Запрошенная требуемая информация о той странице, с которой вы работаете (referer (sic)).

config(referer = pgsession$url)