如何获得动态 url 用于在 R 中抓取数据?

How to get a dynamic url to be used to scrape data in R?

我正在开发一个 shinyapp,它根据用户选择的日期范围从网站上抓取股票数据。我使用包 rvest 来抓取我的数据,但是我仍然坚持使用 R 编程来捕获用户的日期范围并将其存储到可用的 link.

这是我的 UI

dateRangeInput("daterange", "Date range:",start  = "2000-01-01",
                                          end    = lubridate::today(),
                                          min    = "2000-01-01",
                                          max    = lubridate::today(),
                                          format = "mm/dd/yyyy",
                                          separator = "/"
               )

这是我的服务器:

lien = read_html(link = quote(
                                 paste0("https://www.marketwatch.com/investing/stock/",
                                        input$choice_company,
                                        "/download-data?startDate=",
                                        input$daterange[1],
                                        "&endDate=",
                                        input$daterange[2])
                             )
                )

当我 运行 我的应用程序只显示半秒后退出,控制台显示此错误,他似乎无法找到输入,你有解决这个问题的想法吗或任何有用的文档?

Warning: Error in ..stacktraceon..: objet 'input' introuvable
[No stack trace available]
Error in ..stacktraceon..({ : objet 'input' introuvable

法语消息:objet 'input' introuvable 仅表示未找到对象 'input'

提前致谢

您不需要在 URL 上使用 quote()。如果你这样做,你会得到一个未计算的表达式(作为语言对象)而不是一个字符串。下一步是 read_html(),它不接受参数 link。相反,它的第一个参数是 x,它可以是 URL。因此,删除 link = quote( 应该已经解决了它。

此示例应用将原始 HTML 显示为输出以进行演示。

library(shiny)
library(rvest)

ui <- fluidPage(
  textInput("choice_company", "Enter name of a company"),
  dateRangeInput("daterange", "Date range:", start  = "2000-01-01",
                 end    = Sys.Date(),
                 min    = "2000-01-01",
                 max    = Sys.Date(),
                 format = "mm/dd/yyyy",
                 separator = "/"),
  textOutput("ShowUrl"),
  hr(),
  textOutput("ShowHtml")
)

server <- function(input, output, session) {

  URL <- reactive({
      paste0("https://www.marketwatch.com/investing/stock/",
             input$choice_company,
             "/download-data?",
             "startDate=", input$daterange[1],
             "&endDate=",  input$daterange[2])
  })

  output$ShowUrl <- renderText({
    validate(need(input$choice_company, "No company selected"))
    #print(typeof(quote(paste0(input$daterange[1]))))
    URL()
  })

  output$ShowHtml <- renderText({
    validate(need(input$choice_company, "No company selected"))
    lien <- read_html(URL())
    paste(lien) # to convert the list into one long string
  })
}

shinyApp(ui, server)