#r #web-scraping #rvest
#r #очистка веб-страниц #rvest
Вопрос:
Я хочу очистить таблицу из Yahoo Finance и загрузить ее в виде фрейма данных. К сожалению, я действительно не знаю, как это сделать, используя rvest
-package .
Вот первый подход:
library(tidyverse)
library(rvest)
url<-"https://finance.yahoo.com/calendar/ipo?from=2021-02-21amp;to=2021-02-27amp;day=2021-02-23"
url %>%
html() %>%
html_nodes(xpath="table") %>%
html_table()
Как и ожидалось, код не работает.
Кто-нибудь может мне помочь?
Я хочу иметь таблицу с рамкой в виде фрейма данных:
Заранее большое спасибо!
Ответ №1:
К сожалению, таблицу нелегко извлечь с помощью html_table
. Вот способ извлечь отдельные значения из таблицы и выполнить некоторую постобработку, чтобы получить данные в dataframe.
library(rvest)
url<-"https://finance.yahoo.com/calendar/ipo?from=2021-02-21amp;to=2021-02-27amp;day=2021-02-23"
url %>%
read_html() %>%
html_nodes('table') %>%
.[[1]] -> tab1
header <- tab1 %>% html_nodes('th') %>% html_text()
result <- tab1%>%
html_nodes('tr.simpTblRow td') %>%
html_text() %>%
matrix(ncol = 9, byrow = TRUE) %>%
as.data.frame()
names(result) <- header
result
# Symbol Company Exchange
#1 VELOU Velocity Acquisition Corp. Units Nasdaq
#2 FTAAU FTAC Athena Acquisition Corp. Unit Nasdaq
#3 CMIIU CM Life Sciences II Inc. Unit Nasdaq
#4 Metropress Ltd LSE
#5 CTWO.P.V County Capital 2 Ltd TSXV
#6 GSEVU Gores Holdings VII, Inc. Units Nasdaq
#7 NVOS Novo Integrated Sciences, Inc. Common Stock Nasdaq
#8 SLAMU Slam Corp. Unit Nasdaq
# Date Price Range Price Currency Shares Actions
#1 Feb 23, 2021 10.00 - 10.00 - USD - Expected
#2 Feb 23, 2021 - - USD - Expected
#3 Feb 23, 2021 10.00 - 10.00 - USD - Expected
#4 Feb 01, 2021 - 6 GBP 45452752 Priced
#5 Nov 19, 2020 0.08 - 0.08 0.1 CAD 6000000 Priced
#6 Feb 23, 2021 - - USD - Expected
#7 Feb 23, 2021 - - USD - Expected
#8 Feb 23, 2021 10.00 - 10.00 - USD - Expected
Комментарии:
1. Это выглядит очень хорошо! Есть ли также способ сохранить заголовки таблицы?
2. Ее необходимо извлечь отдельно. Смотрите обновленный ответ.
Ответ №2:
Вот самый простой способ решения вашей проблемы, и он также сохраняет заголовки 🙂
library(tidyverse)
library(rvest)
url<-"https://finance.yahoo.com/calendar/ipo?from=2021-02-21amp;to=2021-02-27amp;day=2021-02-23"
# Scrape the data
df <- url %>%
read_html() %>%
html_nodes(xpath = '//*[@id="cal-res-table"]') %>%
as.character() %>%
XML::readHTMLTable()
# df is a list of two tables (as you can see from the website) - pick only the first list item
tbl <- as.data.frame(df[1])
# print your table
tbl
#> NULL..Symbol. NULL.Company NULL.Exchange
#> 1 VELOU Velocity Acquisition Corp. Units Nasdaq
#> 2 FTAAU FTAC Athena Acquisition Corp. Unit Nasdaq
#> 3 CMIIU CM Life Sciences II Inc. Unit Nasdaq
#> 4 Metropress Ltd LSE
#> 5 CTWO.P.V County Capital 2 Ltd TSXV
#> 6 GSEVU Gores Holdings VII, Inc. Units Nasdaq
#> 7 NVOS Novo Integrated Sciences, Inc. Common Stock Nasdaq
#> 8 SLAMU Slam Corp. Unit Nasdaq
#> NULL.Date NULL.Price.Range NULL.Price NULL.Currency NULL.Shares
#> 1 Feb 23, 2021 10.00 - 10.00 - USD -
#> 2 Feb 23, 2021 - - USD -
#> 3 Feb 23, 2021 10.00 - 10.00 - USD -
#> 4 Feb 01, 2021 - 6 GBP 45452752
#> 5 Nov 19, 2020 0.08 - 0.08 0.1 CAD 6000000
#> 6 Feb 23, 2021 - - USD -
#> 7 Feb 23, 2021 - - USD -
#> 8 Feb 23, 2021 10.00 - 10.00 - USD -
#> NULL.Actions
#> 1 Expected
#> 2 Expected
#> 3 Expected
#> 4 Priced
#> 5 Priced
#> 6 Expected
#> 7 Expected
#> 8 Expected
Однако вы можете захотеть очистить имена этих столбцов. 🙂
Комментарии:
1. Спасибо. Это решение работает идеально!
2. Рад слышать @TobKel