【发布时间】:2018-07-07 16:08:53
【问题描述】:
我需要从 URL 下载一系列 Excel 文件,所有文件如下:
http://example.com/orResultsED.cfm?MODE=exED&ED=01&EventId=31
http://example.com/orResultsED.cfm?MODE=exED&ED=02&EventId=31
...
http://example.com/orResultsED.cfm?MODE=exED&ED=87&EventId=31
我在循环中有一些构建块,例如:
for(i in 1:87) {
url <- paste0("http://example.com/orResultsED.cfm?MODE=exED&ED=", i, "&EventId=31")
file <- paste0("Data/myExcel_", i, ".xlsx")
if (!file.exists(file)) download.file(url, file)
}
我的问题:
- 我需要
seq来添加 0(我试过sprintf没有运气) - 我还想导入 Excel 文件,跳过前两行并将它们附加到另一行之后(它们也有相同的列)
更新
@akrun 解决方案效果很好。但事实证明,并非我所有的 Excel 文件都有相同的列数:
map(files, ~read.xlsx(.x,
colNames = FALSE,
sheet = 1,
startRow = 4,
)) %>%
bind_rows
Error in bind_rows_(x, .id) :
Column `X1` can't be converted from numeric to character
我认为这个错误实际上指向了不相等的列数。我尝试添加fill = NA(在测试map_df()时),但没有帮助。
【问题讨论】:
-
FWIW,只要你不是想赚钱,“艾伯塔省选举”实际上会特意告诉你,他们允许个人和教育抓取。请尽量友善并添加
Sys.sleep(5)tho。没有必要比这更快地下载文件。还有一个真的很好的机会,一封电子邮件最终可能会给你一个 ZIP 文件,甚至是一组 SQL 来加载这些文件而无需抓取。但是,嘿,试试example.com。 -
谢谢!我对网络抓取很陌生。我不知道有人可以要求 SQL 访问。 example.com 更多的是缩短链接并使其适合 SO 中的一行!
-
哦,我从你的核动画示例中学到了
if (!file.exists(file)) download.file(url, file)!感谢您的参与!
标签: r loops web-scraping rvest