问题描述
library(Rsqlite)
library(curl)
url <- "https://github.com/kotartemiy/newscatcher/tree/master/newscatcher/data/package_RSS.db"
curl::curl_download(url = url,destfile = "inst/external-data/package_RSS.db",quiet = TRUE,mode = "wb")
可以使用,但是下载的文件大小在79Kb和82Kb之间(取决于我使用的模式)。但是当我尝试访问数据库文件时,得到警告:
sqlite.driver <- dbDriver("sqlite")
db <- dbConnect(sqlite.driver,dbname = "inst/external-data/package_RSS.db")
随后出现错误:
dbListTables(db)
可以使用download.file()
和不同的mode
参数来复制。但是,如果我手动下载文件,则文件大小为376 Kb,Rsqlite代码可以正常工作。是什么原因引起的?谢谢
解决方法
正如@ 27ϕ9所说,您正在下载网页,而不是它所引用的文件。
url <- "https://github.com/kotartemiy/newscatcher/tree/master/newscatcher/data/package_rss.db"
download.file(url,"~/Downloads/package_rss.db")
# trying URL 'https://github.com/kotartemiy/newscatcher/tree/master/newscatcher/data/package_rss.db'
# Content type 'text/html; charset=utf-8' length unknown
# downloaded 82 KB
readLines("~/Downloads/package_rss.db",n=10)
# [1] ""
# [2] ""
# [3] ""
# [4] ""
# [5] ""
# [6] "<!DOCTYPE html>"
# [7] "<html lang=\"en\">"
# [8] " <head>"
# [9] " <meta charset=\"utf-8\">"
# [10] " <link rel=\"dns-prefetch\" href=\"https://github.githubassets.com\">"
如果在浏览器中转到该URL,您将在页面上看到两个链接:
-
“下载”按钮将您带到raw.githubusercontent.com(link)下的链接,因此您可以寻找该URL;
-
还有一个“查看原始”链接,该链接采用您开始时使用的相同网址,将
/tree/
替换为/blob/
,并附加?raw=true
({{3} }。
(虽然可以通过rvest
html并以编程方式获取链接,但我认为仅以正确的URL开头才是首选路线。)