如何获得动态 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)
我正在开发一个 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)