403 Ошибка при использовании Rvest для входа в веб-сайт для соскабливания -- r поле с участием session поле с участием web-scraping поле с участием http-status-code-403 поле с участием rvest пол Связанный проблема

403 Error When Using Rvest to Log Into Website For Scraping


6
vote

проблема

русский

Я пытаюсь высказать страницу на веб-сайте, который требует входа в систему и в целом получение ошибки 403.

Я изменил код из этих 2 сообщений для моего сайта, использование Rvest или HTTR для входа в нестандартные формы на веб-странице и Как повторно использовать сеанс, чтобы избежать повторного входа в систему при сосревении с 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 как R.S. Предлагается в комментариях, однако я получаю ту же ошибку, что и выше.

 <код> 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 событий, и таблица будет заполнена, в которой я хочу скачать. У меня есть весь код, необходимый для этого, но я застрял только на детали для входа.

Спасибо за вашу помощь.

Английский оригинал

I am trying to scrape a page on a website that requires a login and am consitently getting a 403 Error.

I have modified the code from these 2 posts for my site, Using rvest or httr to log in to non-standard forms on a webpage and 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 

When the code is run, I get this message:

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

I have also run the code this way, by updating user_agent as R.S. suggested in the comments, however, I receive the same error as above.

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 

If you pull the page up without logging in, it shows you a bit of the data table at the bottom right below the text: "Earnings Events Available: 65"

Once logged in, it will show all 65 events and the table will be filled in which is what I want to download. I have all the code necessary to do that in place but am stuck just on the login part.

Thank you for your help.

</div
              
         
         

Список ответов

5
 
vote
vote
Лучший ответ
 
<Р> Используя предложение протоколиста, я использовал RSelenium успешно войти. <Р> Быстрое примечание для коллег Макинтоша об использовании либо хром или фантом. Я бег El Capitan так имел некоторые проблемы с получением макинтоша распознавать пути к обеим бен файлов. Вместо этого я переехал бен файлы в / USR / местные / бен и они побежали без проблем. <Р> Ниже приведен код, чтобы сделать так:
 <код> 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)   
 

Using R.S.'s suggestion, I used RSelenium to log in successfully.

A quick note for fellow mac users on using either chrome or phantom. I am running El Capitan so had some issue getting the mac to recognize the paths to both of the bin files. Instead, I moved the bin files to /usr/local/bin and they ran without an issue.

Below is the code to do so:

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) 

This can also be done with phantom,

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) 
</div
 
 
1
 
vote
<Р> Вот ответ, чтобы решить эту проблему в исходном случае использования с <код> 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 (так в оригинале)).
 <код> config(referer = pgsession$url)   
 

Here's the answer to solve the problem in the original use case with 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 

The requested requires knowledge of the page you've come from (the referer(sic)).

config(referer = pgsession$url) 
</div
 
 

Связанный проблема

0  Ошибка при использовании списков  ( Error when using lists ) 
У меня есть файл .rdata со списком внутри. Однако я получаю сообщение об ошибке при попытке отобразить список. <код> ls(data$Test$t0) Error in list2env(lis...

12  Частные члены в R Справочник класса R  ( Private members in r reference class ) 
Можно ли иметь частные поля элементов внутри класса R r. Играя с некоторыми из онлайн-примеров у меня есть: <код> > Account <- setRefClass( "ref_Account"...

3  R: Обновить график [XY] Lims с новыми пунктами () или линий () дополнениями?  ( R update plot xylims with new points or lines additions ) 
Фон: Я запускаю симуляцию Монте-Карло, чтобы показать, что конкретный процесс (совокупное среднее) делает не сходится со временем, и часто отклоняется ...

8  Использование геоконининов в качестве координат вершин в Igraph R-пакет  ( Using geo coordinates as vertex coordinates in the igraph r package ) 
в пакете igraph для R, я борюсь, чтобы построить социальную сеть, используя координаты широты / долготы в качестве макета графика. Представьте себе этот про...

6  Определить, имеет ли последовательность «пробелы» в R  ( Determine if a sequence has gaps in r ) 
Я хотел бы определить, содержит ли последовательность любых пробелов или нерегулярных шагов? Не уверен, что это правильный путь к фразум это, и есть хороший ш...

2  dlyryr "не обещание" ошибка  ( Dplyr not a promise error ) 
У меня есть набор набора панели, для которого я создал отсталые переменные с помощью функции LAG (). Когда я пытаюсь рассчитать дельта для каждого TimePoint, ...

1  Ошибка при использовании функции nnetar из пакета прогноза  ( Error when using nnetar function from forecast package ) 
У меня есть следующие данные: <код> kafka4 ................. Когда я выполняю функцию Nnetar, я получаю следующую ошибку: <код> kafka5 Я попробова...

0  Коэффициент переменных членства в R  ( Coefficient variable membership in r ) 
Я разработал ужасно длительное решение для этого перед использованием регулярных выражений, но я надеюсь, что есть более родственный способ сделать это. Учи...

2  Как изменить график разброса GGPlot2  ( How to modify ggplot2 scatter plot ) 
Вот мой набор данных: <код> df1 = data.frame(Count.amp = c(8,8,1,2,2,5,8), Count.amp.1 = c(4,4,2,3,2,5,4)) Я попробовал <код> library(ggplot2) qplot(C...

139  Игнорировать выбросы в ggplot2 boxplot  ( Ignore outliers in ggplot2 boxplot ) 
Как бы я игнорировал выбросы в ggplot2 boxplot? Я не просто хочу, чтобы они исчезнули (то есть выброса .size = 0), но я хочу, чтобы они были игнорированы таки...

0  Трудно заполнить NAS с вмененными ценностями петлей, но не один за другим  ( Difficultly filling nas with imputed values by loop but not one by one ) 
Так что у меня есть матрица в R, это подмножество данных DataFrame, удерживающееся немного больше, чем идентификатор, группируя переменную и серии 1100 показа...

7  Ось X не соответствует барплоту  ( X axis does not match barplot ) 
Я использовал функцию barplot () для создания сложенного диаграммы из матрицы. Матрица выглядит так: <код> 1 0.989013 0.010987 2 0.999990 0.000010 3 0.999...

0  Извлечение данных из нижних слоев в растробрике  ( Extracting data from lower layers in a rasterbrick ) 
Итак, я извлекаю данные из растробрика, который я сделал, используя метод из этого вопроса: Как извлечь данные из растробрика? В дополнение к получению да...

1  Как прочитать файлы суффикса .avl в r?  ( How to read avl suffix files into r ) 
Я загрузил глобальные водно-болотные угодья и озерные данные из этой ссылки: https://www.worldwildlife.org/pages/globalakes- и-водно-болотный угодья база дан...

0  R Язык: Как работать с динамически размером вектора?  ( R language how to work with dynamically sized vector ) 
Я изучаю программирование R, и пытаясь понять лучший подход к работе с вектором, когда вы не знаете, последний размер, он в конечном итоге будет. Например, в ...