1

I'm failing to extract values displayed on a dynamic url. The issue appears to be the dynamism of the url.

When I inspect the source code & use that as the html contenct, I can extract it correctly. When I use the url live, html_node seems to return empty & my code fails.

library(rvest)
library(tidyverse)

# 2 sources of html
url_source <- '<span>Earnings on <span>Thu, Aug 03</span></span><span class="Mstart(15px) Fw(500) Fz(s)"><span>1-100 of 1270 results</span></span>'
url_live <- "https://finance.yahoo.com/calendar/earnings?from=2023-07-30&to=2023-08-05&day=2023-08-03"

# HTML content to parse
#html_content <- url_source
html_content <- url_live

# Parse the HTML content
webpage <- read_html(html_content)

# Extract the value using CSS selector
value <- webpage %>%
  html_node(xpath = '//span[contains(@class, "Mstart") and contains(@class, "Fw") and contains(@class, "Fz")]/span') %>%
  html_text()

# Extract the numeric part from the text
numeric_value <- as.numeric(str_extract(value, "\\d+(?= results)"))

# Print the extracted value
print(numeric_value)
#[1] 1270 from url_source
#[1] NA from url_live

Till
  • 3,845
  • 1
  • 11
  • 18

1 Answers1

1

It's working for me with html_nodes() instead of html_node().

Note: rvest 1.0.0 introduced html_element() and html_elements() to supersede html_node*()`

library(rvest)
library(tidyverse)

url_live <- "https://finance.yahoo.com/calendar/earnings?from=2023-07-30&to=2023-08-05&day=2023-08-03"
html_content <- url_live
webpage <- read_html(html_content)

# Extract the value using CSS selector
value <- webpage %>%
  html_elements(xpath = '//span[contains(@class, "Mstart") and contains(@class, "Fw") and contains(@class, "Fz")]/span') %>%
  html_text()

# Extract the numeric part from the text
as.numeric(str_extract(value, "\\d+(?= results)")) |> 
  na.omit()
#> [1] 1266
#> attr(,"na.action")
#> [1] 1 2 3
#> attr(,"class")
#> [1] "omit"
Till
  • 3,845
  • 1
  • 11
  • 18