|
Prompt:
将以下代码修改为并行处理代码 for (i in 0:900){ url <- paste0( '###### =', i ) resp <- GET(url = url, add_headers(.headers = myheaders), encode = "raw") pg <- read_html(resp) #不会出现乱码 tables <- html_table(pg) #提取表格 tab <- html_table(pg, fill = TRUE)[[3]] %>% as.data.frame() %>% rename_all(~c('No','#','#',#','#','#')) %>% slice(-1) #第一行作为列名 # 提取所有超链接 links <-read_html(url) %>% html_nodes("a") %>% html_attr("href") # 打印超链接 print(links) #提取站点编码 code <- strapplyc(links, "[0-9-]{10,}", simplify = TRUE) # 取list的前10个字符 code <- unlist(lapply(code, function(x) substr(x, 1, 10))) tab$code <- code tab <- rbind.fill(tab) }
ChatGPT的回复如下:比较规范,可以运行
library(foreach)
library(doParallel)
# 设置并行处理的核心数
num_cores <- detectCores()
registerDoParallel(cores = num_cores)
# 创建一个空的数据框用于存储结果
result_df <- data.frame()
# 并行处理循环
foreach(i = 0:900, .packages = c("httr", "rvest", "stringr")) %dopar% {
url <- paste0('#######E=', i)
resp <- GET(url = url, add_headers(.headers = myheaders), encode = "raw")
pg <- read_html(resp)
# 提取表格
tab <- html_table(pg, fill = TRUE)[[3]] %>%
as.data.frame() %>%
rename_all(~c('No','##','##','##','##','###')) %>%
slice(-1)
# 提取所有超链接
links <- read_html(url) %>%
html_nodes("a") %>%
html_attr("href")
# 提取站点编码
code <- strapplyc(links, "[0-9-]{10,}", simplify = TRUE)
code <- unlist(lapply(code, function(x) substr(x, 1, 10)))
# 添加站点编码列
tab$code <- code
# 将结果添加到结果数据框中
result_df <<- rbind.fill(result_df, tab)
}
# 停止并行处理
stopImplicitCluster()
# 输出结果数据框
print(result_df)
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-4-28 01:13
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社