Веб-очистка с логином и перенаправлением с использованием R и rvest / httr - PullRequest
0 голосов
/ 18 декабря 2018

Я хотел бы собрать информацию с веб-страницы.Есть экран входа в систему, и когда я вошел в систему, я могу получить доступ ко всем видам страниц, с которых я хотел бы почистить информацию (например, фамилия игрока, объект .lastName).Я использую R и пакеты rvest и httr.

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

Форма входа в систему доступна на http://kickbase.sky.de/anmelden, а соответствующие страницы имеют форму http://kickbase.sky.de/spielerprofil/player-name/number, например http://kickbase.sky.de/spielerprofil/nadiem-amiri/1639#.

Вот код, который я использовал.Большое спасибо за вашу помощь.

install.packages("rvest")
install.packages("httr")
library(rvest)
library(httr)

handle <- handle("http://kickbase.sky.de")  # Create handle
path   <- "anmelden" #  Login Path

# fields found in the login form.
login <- list(
  email = "testscrape@gmail.com"
  ,password  = "tester"
  ,redirect_url =  # I want to be redirected to this page and then scrape info from here
    "http://kickbase.sky.de/spielerprofil/nadiem-amiri/1639#"
)

response <- POST(handle = handle, path = path, body = login)

webpage <- read_html(response)
name_data <- html_text(html_nodes(webpage, ".lastName"))
name_data

1 Ответ

0 голосов
/ 18 декабря 2018
library(rvest)
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"="testscrape@gmail.com",
                                     "password"="tester",
                                     "redirect_url"="http://kickbase.sky.de/spielerprofil/nadiem-amiri/1639#"),
                         encode='json'
                           )
player_page<-jump_to(page,"https://kickbase.sky.de/api/v1/news?skip=0&player=1639&limit=3")
data<-jsonlite::fromJSON(readBin(player_page$response$content,what="json"))

print(data)

Обратите внимание, что веб-сайт предоставляет API, и именно здесь вы получаете данные https://kickbase.sky.de/api/v1/news?skip=0&player=1639&limit=3

переменная data содержит всю необходимую информацию

...