You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R Shiny读取导入CSV的url列爬虫生成词云报错如何解决

问题原因
  • 类型判断错误:Shiny文件上传组件返回的input$csv是包含文件元信息的数据框,不是table类型,is.table(input$csv)判断永远不成立,导致inputWords响应式变量在上传CSV后没有合法返回值,最终返回长度为0的NULL,触发后续if判断报错。
  • 响应式变量返回值缺失:
    • inputWords仅在input$csv为NULL和是table类型时给出返回值,其余场景无返回,默认返回NULL
    • data_source仅在input$source == "csv"时给data赋值,其余场景data未定义,返回空值
  • 异常场景未处理:未处理CSV无url列、URL不足10条、URL请求失败、页面元素提取为空等边界情况,也会导致后续逻辑拿到长度为0的参数触发报错。
解决方法

修正后的完整服务端代码如下:

server <- function(input, output) {
  data_source <- reactive({
    # 补充非csv场景默认返回值
    if (input$source == "csv") {
      data <- inputWords()
    } else {
      data <- ""
    }
    return(data)
  })

  inputWords <- reactive({
    if (is.null(input$csv)) {
      return("")
    }
    
    CSVFile <- read.csv(input$csv$datapath)
    # 校验url列是否存在
    if(!"url" %in% colnames(CSVFile)) {
      warning("CSV文件中不存在url列")
      return("")
    }
    # 兼容url不足10条的情况,自动取所有可用url
    max_url <- min(10, nrow(CSVFile))
    Urls <- na.omit(CSVFile$url[1:max_url])
    
    pages <- c()
    
    for (i in Urls) {
      # 捕获单条URL爬取异常,避免单条失败导致全流程崩溃
      tryCatch({
        ArticlePages <- read_html(i)
        articleText <- ArticlePages %>% 
          html_elements("h1.newsfull__title, p") %>% 
          html_text()
        pages <- c(pages, articleText)
      }, error = function(e) {
        warning(paste("爬取URL",i,"失败:",e$message))
      })
    }
    # 处理爬取结果为空的场景
    if(length(pages) == 0) {
      return("")
    }
    # 合并为文本字符串适配词云函数输入要求
    return(paste(pages, collapse = " "))
  })

  output$cloud <- renderWordcloud2({
    # 空数据时不触发词云生成
    req(data_source() != "")
    create_wordcloud(data_source(),
                     num_words = input$num)
  })
}

核心修改点说明:

  1. 移除错误的is.table(input$csv)判断,上传文件后直接进入处理逻辑
  2. 补充CSV列校验、URL去空、数量不足的兼容处理
  3. 新增异常捕获逻辑,避免单条URL爬取失败导致程序报错
  4. 所有响应式变量分支都补充默认返回值,杜绝空NULL返回
  5. 词云渲染前增加非空校验,避免空数据传入生成函数
  6. 调整爬取结果存储格式,直接合并为字符串适配词云函数的输入要求

内容的提问来源于stack exchange,提问作者manoj rasika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:15:04