Очистка веб-страницы с использованием пакета rvest и инструмента selectorgadget в r - PullRequest
0 голосов
/ 06 января 2020

Я пытаюсь очистить данные сайта Индекса Панамакс Бельц c. Я также удалил данные с других сайтов, но эта страница не работает. Я использую подключение к офису, в то время как сайт, который будет загружен с сайта, показывает соединение «Незащищенный». Это вызывает проблему?

Мне требуются столбцы «Дата» и «Закрыть», и на данный момент я написал следующий код для очистки:

#Baltic Panamax Index
#Specifying the url for desired website to be scraped
con=url("http://marine-transportation.capitallink.com/indices/baltic_exchange_history.html?ticker=BPI","rb")

#Reading the HTML code from the website
webpage <- read_html(con)
webpage

#Using CSS selectors to scrape the date section*
date_data = html_nodes(webpage,".text .div_line:nth-child(2)")

#Converting the ranking data to text
date_data <- html_text(date_data)

#Let's have a look at the rankings*
head(date_data)

Требуется вывод :

Date          Close
Jan 03,2020   949
Jan 02,2020   1003

1 Ответ

0 голосов
/ 08 января 2020

Вы должны отправить свое имя пользователя в качестве повара ie в заголовке запроса, чтобы получить эту страницу. Я считаю, что пакет httr дает большую гибкость для выполнения таких запросов. Для этого сайта вам нужно будет использовать имя пользователя, которое вы уже зарегистрировали на сайте. Просто измените поле user_name в коде ниже, и это должно работать для вас:

# Use the httr package to allow flexibility with http requests
library(httr)
library(rvest)

# Set username here -----
#                       |
#             ---------------------
#             |                   |
#             v                   v
user_name  <- "my.name@example.com"

# Set url we need
site  <- "http://marine-transportation.capitallink.com"
url   <- paste0(site, "/indices/baltic_exchange_history.html?ticker=BPI")

# Obtain the page we want using user name as a cookie
response <- GET(url, set_cookies(clUser_email = user_name,
                                 expires      = "Sat, 16-Sep-2051 11:30:30 GMT",
                                 `Max-Age`    = "1000000000",
                                 path         = "/",
                                 domain       = "capitallink.com"))

# Parse the HTML code from the website using rvest
webpage       <- read_html(response)
date_data     <- html_nodes(webpage, "table")
result        <- html_table(date_data[4])[[1]]

# Tidy up the result
result        <- result[-1, 2:3]
names(result) <- c("Date", "Close")

Теперь у нас есть результат, который вы искали:

result
#>            Date   Close
#> 2  Jan 06, 2020  890.00
#> 3  Jan 03, 2020  949.00
#> 4  Jan 02, 2020 1003.00
#> 5  Dec 24, 2019 1117.00
#> 6  Dec 23, 2019 1154.00
#> 7  Dec 20, 2019 1201.00
#> 8  Dec 19, 2019 1265.00
#> 9  Dec 18, 2019 1340.00
# ....[ plus 50 more rows]....
...