Хобрук: Ваш путь к мастерству в программировании

R Очистить HTML-таблицу от Yahoo Finance

Я хочу очистить таблицу от Yahoo Finance и загрузить ее в виде кадра данных. К сожалению, я действительно не знаю, как это сделать с помощью rvest-пакета.

Вот первый подход:

library(tidyverse)
library(rvest)

url<-"https://finance.yahoo.com/calendar/ipo?from=2021-02-21&to=2021-02-27&day=2021-02-23"

url %>%
  html() %>%
  html_nodes(xpath="table") %>%
  html_table()

Как и ожидалось, код не работает. Кто-нибудь может мне помочь?

Я хочу иметь обрамленную таблицу в качестве фрейма данных:

введите здесь описание изображения

Спасибо заранее!

09.03.2021

Ответы:


1

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

library(rvest)

url<-"https://finance.yahoo.com/calendar/ipo?from=2021-02-21&to=2021-02-27&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
09.03.2021
  • Это выглядит очень хорошо! Есть ли способ сохранить заголовки таблицы? 09.03.2021
  • Его нужно извлекать отдельно. Смотрите обновленный ответ. 09.03.2021

  • 2

    Вот самый простой способ решить вашу проблему, и он также сохраняет заголовки :)

    library(tidyverse)
    library(rvest)
    
    url<-"https://finance.yahoo.com/calendar/ipo?from=2021-02-21&to=2021-02-27&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
    

    Однако вы можете захотеть очистить имена этих столбцов. :)

    09.03.2021
  • Спасибо. Это решение работает отлично! 10.03.2021
  • Рад слышать @TobKel 11.03.2021
  • Новые материалы

    Прогресс в технологии Трансформеров часть 3
    Многомасштабный управляющий сигнальный преобразователь для бесфазного синтеза движения (arXiv) Автор: Линтао Ван , Кун Ху , Лей Бай , Юй Дин , Ваньли Оуян , Чжиюн Ван . Аннотация:..

    Представляем поддержку компонентов Vue.js. Мгновенный HMR и многое другое.
    Хотя у FuseBox уже был плагин Vue, он был базовым и не имел многих функций, которые делали работу с Vue.js такой приятной. Однако с этим выпуском мы рады сообщить, что в FuseBox..

    Приключения в Javascript, часть 1
    Я продолжаю думать о том, чтобы писать больше, но чем больше я думаю об этом, тем меньше я это делаю. Итак, сегодня я перестал думать и начал писать. Отсюда можно только спускаться… В..

    Понимание дженериков в TypeScript: подробное руководство
    Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..