如何纠正错误:`x` 必须是长度为 1 的字符串?

问题描述 投票:0回答:1

我想下载许多类似 URL 上的表格。

这些 URL 仅在一小部分(数字)有所不同,因此我将不同的数字(2270100023、2270100080、2270100122)放入 Excel 文件(test_no.xlsx)中,并创建一个循环来创建一系列 URL。到目前为止,它非常成功。

no_list <- read_excel("X:/zhang/R/markdown/test/test_no.xlsx")
xpath1 <- '//*[@id="kihonPage"]/div[1]/div[1]/article/section/div[5]'
final_data <- NULL

for (i in no_list)
 {url1 <- paste("https://www.kaigokensaku.mhlw.go.jp/20/index.php?action_kouhyou_detail_024_kihon=true&JigyosyoCd=", i, "-00&ServiceCd=510", sep ="")
 final_data <- rbind(final_data, url1)
}

final_data 是一个“矩阵”“数组”,就像 final_data I got

但是当我尝试使用这个循环下载表格时,程序出错了。 错误:

x
必须是长度为1的字符串 我使用的代码如下:

no_list <- read_excel("X:/zhang/R/markdown/test/test_no.xlsx")
xpath1 <- '//*[@id="kihonPage"]/div[1]/div[1]/article/section/div[5]'
final_data <- NULL

for (i in no_list)
 {url1 <- paste("https://www.kaigokensaku.mhlw.go.jp/20/index.php?action_kouhyou_detail_024_kihon=true&JigyosyoCd=", i, "-00&ServiceCd=510", sep ="")

test <- url1 %>%                # Scrape data
  read_html() %>%
  html_nodes(xpath=xpath1) %>%
  html_table()

test1 <- test[[1]] # Select table number
final_data <- rbind(final_data, test1)
}

我该如何解决这个问题?

r loops web-scraping url
1个回答
0
投票

在没有看到更多数据的情况下帮助解决这个问题有点困难。我不是这方面的专家,但我在循环 URL 时遇到了类似的问题,并出现相同的错误。

我的问题是 URL 最初是如何存储的,它是一个 tibble 中的列表。传递给循环的 tibble 中的第一项实际上是列表中的所有 URL。您可以通过检查长度来检查此特定问题:

length(no_list)
。如果返回为 1,则您可能会遇到同样的问题。您可以修复 URL 最初存储的方式,也可以通过进一步子集来访问各个 URL:
no_list[[1]][1]
将选择第一个 URL,
no_list[[1]][2]
选择第二个 URL,等等。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.