Удаление информации с сайта, который требует входа в систему с помощью R (возможно, используйте API) - PullRequest
1 голос
/ 13 октября 2019

Учитывая этот URL требует следующие данные для входа в систему:

Имя пользователя или адрес электронной почты -> Пользователь: testuserscrap@web.de

Passwort -> Пароль: testuserscrap

(Сайт является своего рода фэнтезийным футболом немецкой Бундеслиги.)

Существуетсообщение, где кто-то просит помощи для того же веб-сайта.

Однако я не хочу получать информацию об определенных игроках, но о реальной команде. В браузере необходимо выполнить следующие действия:

Нажмите на значок в красном кружке: enter image description here

Указывает на эту страницугде я хотел бы получить все имена (игроков) в списке 1 и 2: enter image description here

Означает, что я хотел бы получить вывод, такой как:

Diego Contento
Alfred Finnbogason
...

Я не уверен, какой путь может быть лучшим. Судя по упомянутым постам, похоже, есть API. Тем не менее, я не могу получить доступ к информации с помощью кода, адаптированного из указанного поста:

library(rvest)
library(jsonlite)
library(httr)
library(plyr)
library(dplyr)

url<-"https://kickbase.sky.de/"
page<-html_session(url)
page<-rvest:::request_POST(page,url="https://kickbase.sky.de/api/v1/user/login",
                           body=list("email"="testuserscrap@web.de",
                                     "password"="testuserscrap",
                                     "redirect_url"="https://www.kickbase.com/transfermarkt/kader"),
                           encode='json'
)

ck <- cookies(page)
player_page<-jump_to(ck$value,"https://api.kickbase.com/leagues/1420282/lineupex")

К сожалению, я не такой специалист в области кодирования или веб-шифрования. Я пробовал много вещей, но я не пришел к решению: / Поэтому я был бы очень признателен, если у вас есть совет или идея, как я могу получить информацию.

Best:)

1 Ответ

1 голос
/ 15 октября 2019

Ого, это был сложный вопрос, но очень хороший опыт для меня. Чтобы решить эту проблему, я использовал пакет curlconvertor, доступный для загрузки с GitHub с помощью пакета devtools. См. https://github.com/hrbrmstr/curlconverter, и другие вопросы / ответы, размещенные здесь при переполнении стека.

Сначала войдите на веб-страницу с помощью браузера и перейдите на интересующую страницу. Используя инструменты разработчика, скопируйте адрес 'cURL' из файла интереса. CURL может быть удален из несущественных частей, но мне нужно будет определить некритические части методом проб и ошибок.

Затем используйте функцию straighten, отредактируйте ИД пользователя и пароль (они не были сохранены с адресом cURL), сделайте запрос, а затем проанализируйте возврат.

#cURL copied from network tab for the requested file
xcurl<-"curl 'https://api.kickbase.com/leagues/1420282/lineupex' 
-XGET 
-H 'Accept: */*' 
-H 'Origin: https://kickbase.com' 
-H 'Referer: https://kickbase.com/transfermarkt/kader' 
-H 'Accept-Language: en-us' 
-H 'Host: api.kickbase.com' 
-H 'Authorization: Bearer XU3DGDZBxlHB0sjqG01yLhHihT2AacPeIeWOlY+u3nxz/iokfCjn8a9vaKeKFXwxJpcH/0FXOgGg3J2EfmUUDJ9uwjT+oxHZTGc1EuOxbG0i66fRBBm1RBT0Yd4ACRDQ9BCs8yb+/w9+gOPIyhM2Vio3DZemExATq22osCGeW6VzYmos/3F8MTDbKOAk8NPKQYr5xPSght26ayZ4/X21ag==' \
-H 'Accept-Encoding: br, gzip, deflate' 
-H 'Connection: keep-alive'"

#See https://github.com/hrbrmstr/curlconverter, install from devtools
library(curlconverter)
library(dplyr)

my_ip<-straighten(xcurl)

#add password and user id 
my_ip[[1]]$password<-"testuserscrap"
my_ip[[1]]$username<-"testuserscrap@web.de"

#Make page request
respone<-my_ip %>% make_req()

#retrieve the entire file
#jsonfile<-jsonlite::toJSON(content(respone[[1]](), as="parsed"), auto_unbox = TRUE, pretty=TRUE)

#retrieve only the player info from file and convert to data frame
dfs <- lapply(content(respone[[1]](), as="parsed")$players, data.frame)
#not every player has the same information thus bind_rows instead of rbind   
players <- do.call(bind_rows, dfs)
players
...