【问题标题】:Error in x[[1]] : subscript out of bounds - web scraping in Rx[[1]] 中的错误:下标越界 - R 中的网络抓取
【发布时间】:2021-02-01 05:21:32
【问题描述】:

我正在尝试使用 R (https://www.datacamp.com/community/tutorials/exploring-h-1b-data-with-r#gs.V8vcRAc) 重新创建这个有效的网络抓取数据示例

但是,当我执行代码行all.h1b<-pblapply(all.urls, main) 我进度到 90%,然后收到错误消息:

x[[1]] 中的错误:下标超出范围

完整代码如下:

library(jsonlite)
   library(rvest)
   library(pbapply) 
   library(data.table)
json.cities<-paste0('http://h1bdata.info/cities.php?term=', letters)
all.cities<-unlist(pblapply(json.cities,fromJSON))
city.year<-expand.grid(city=all.cities,yr=seq(2012,2016))
##city.year$city<-urltools::url_encode(as.character(city.year$city))
city.year$city <- lapply(as.character(city.year$city), URLencode , reserved = TRUE)
all.urls<-paste0('http://h1bdata.info/index.php?em=&job=&city=', city.year[,1],'&year=', city.year[,2])
main<-function(url.x){
  x<-read_html(url.x)
  x<-html_table(x)
  x<-data.table(x[[1]])
  return(x)
  Sys.sleep(5)
}


##Sys.sleep(5)
all.h1b<-pblapply(all.urls, main)

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 您好,欢迎您!你能写出class(x)str(x)的输出吗?
  • 谢谢。抱歉,我对 R 很陌生,所以请多多包涵。你想让喵喵在什么时候使用class(x)' and str(x)`
  • 在R中写入class(x)str(x),运行代码并告诉我们哪个是输出。
  • class(x) [1] "数字" str(x) num [1:100] 0.597 -0.323 -0.199 0.47 -0.335 ...
  • 好的,所以如果x 是数字,您需要将其称为x[1] 而不是x[[1]],如果它是list 而不是numeric,则应该是符号

标签: r rvest


【解决方案1】:

通常,当您尝试访问超出其边界的数组时会出现此错误。 有时,当软件包版本不是最新或太最新时,也会发生这种情况。 我也在尝试代码,让我们看看它是否有效或我是否有同样的问题。

试试这些改变

library(jsonlite)
   library(rvest)
   library(pbapply) 
   library(data.table)
json.cities<-paste0('http://h1bdata.info/cities.php?term=', letters)
all.cities<-unlist(pblapply(json.cities,fromJSON))
city.year<-expand.grid(city=all.cities,yr=seq(2012,2016))
city.year$city<-urltools::url_encode(as.character(city.year$city))
city.year$city <- lapply(as.character(city.year$city), URLencode , reserved = TRUE)
all.urls<-paste0('http://h1bdata.info/index.php?em=&job=&city=', city.year[,1],'&year=', city.year[,2])
main<-function(url.x){
  x<-read_html(url.x)
  x<-html_table(x)
  x<-data.table(x[1])
  return(x)
  Sys.sleep(5)
}

all.h1b<-pblapply(all.urls, main)

这段代码应该可以工作!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 2018-08-19
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    相关资源
    最近更新 更多