2

我正在尝试与和rvest并行使用从网页中抓取值。具体来说,我正在使用称为 TMK 的房地产标识符从网站上检索房产的人口普查区号。foreachdoParallel

在下面的示例代码中,foreach循环在运行时给出了所需的结果(包含区域编号的向量)%do%,而不是运行%dopar%

require(rvest); require(foreach); require(doParallel)
registerDoParallel(cores = 4)

# sample input values used to generate html
tmklist <- c(91136088, 73006073, 92023027, 45061064)

# read html for each TMK
# DOES NOT PRODUCE DESIRED RESULT WHEN USED WITH %dopar%
tmkhtml <- foreach(i = seq_along(tmklist)) %do% {
  read_html(paste0(paste0('http://gis.hicentral.com/pubwebsite/TMKDetails.aspx?tmk=', tmklist[[i]]),'&lyrLst=0|0|0|0|0|0|0|0|0|0|0|0|0|13|0|15|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|lblsaerial2008&unit=0000&address='))
}

# scrape census tract number from html page
# loop returns vector of chr(0) if %dopar% used instead of %do%
tract.num <- list()

for(i in 1:length(tmkhtml)){
  tract.num[[i]] <- html_text(html_nodes(tmkhtml[[i]], '#lblTrackNumber'))   
}

我(可能错误地)推断出并行后端是罪魁祸首,但我之前在其他应用程序中使用过很多次,似乎找不到问题所在。

4

1 回答 1

2

可能是当您尝试使用多个 R 实例阅读每一页时,所有这些都需要使用rvestrvest::read_html。尝试加载库,foreach例如:

# read html for each TMK
tmkhtml <- foreach(i = seq_along(tmklist)) %dopar% {
library(rvest)
  read_html(paste0(paste0('http://gis.hicentral.com/pubwebsite/TMKDetails.aspx?tmk=', tmklist[[i]]),'&lyrLst=0|0|0|0|0|0|0|0|0|0|0|0|0|13|0|15|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|lblsaerial2008&unit=0000&address='))
}
于 2016-08-06T20:34:15.400 回答