【问题标题】:How to get a dynamic url to be used to scrape data in R?如何获取用于在 R 中抓取数据的动态 url?
【发布时间】:2021-05-23 04:27:51
【问题描述】:

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

这是我的用户界面

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'

提前致谢

【问题讨论】:

    标签: r shiny shiny-server shinyapps


    【解决方案1】:

    您不需要在 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)
    

    【讨论】:

    • 谢谢 Jan 先生,我想既然 read_html 需要一个带引号的 url,使用 paste0 不会输出我在 read_html 中使用的链接,这就是我想到引用的原因。再次感谢
    猜你喜欢
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    相关资源
    最近更新 更多