• R语言
  • download.file() 无法下载网络图片

dapengde 感觉也不是有没有curl的问题!我直接复制了这两个链接到浏览器中,第一个链接能打开,第二个链接不能。我删除了下载的curl,R中也有curl这个功能,同样显示的是第一个链接能打开,第二个链接不能。代码如下:

> curl::curl("http://www.biomet.co.at/pictures/", open = "r")
A connection with                                               
description "http://www.biomet.co.at/pictures/"
class       "curl"                             
mode        "r"                                
text        "text"                             
opened      "opened"                           
can read    "yes"                              
can write   "no"                               
> curl::curl("http://www.biomet.co.at/wp/wp-content/gallery", open = "r")
Error in open.connection(con, open = mode) : HTTP error 403.

估计是因为服务器的原因,第二个链接在我这打不开,所以才有之前的两个问题。

    junfei 第二个链接我也打不开。你的 curl 路径加到环境变量里了吗?

      > bd <- '1994-9-22 20:30:00'
      > bdtime <- strptime(x = bd,  format = '%Y-%m-%d %H:%M:%S',  tz = "Asia/shanghai")
      > unlist(unclass(bdtime))
         sec min hour mday mon year wday yday isdst zone gmtoff 
         "0" "30" "20" "22" "8" "94" "4" "264" "0" "CST" NA 

      这是提取时间的年月日时分秒代码,但是我发现其中有个问题就是,提取的月份总是比实际月份少了一个月,不知道这是不是软件bug,还是另有说法呢?
      奇怪奇怪,少见则多怪!

        dapengde 请问一下环境变量是指单独加一行curl <- “本地的路径”,还是怎麽的呢?
        curl <- "d:/CURL/curl-7.64.1-win64-mingw/bin/curl.exe"
        加了这行代码上去了,但是后面的warning与error还是一样的。

          junfei

          事实上看了一下download.file的帮助,window的method改成"wininet"应该就行了

          不过我测了一下,这样下载下来的文件会报错,换成curl::curl_download()就行,你可以试试装一下curl这个包
          install.packages("curl")

          代码

          urlink <- 'http://www.biomet.co.at/pictures/'
          aa <- readLines(urlink, encoding = 'UTF-8')
          linkformat <- '/wp-content/gallery/.*jpg.*'
          bb <- aa[grep(linkformat, aa)]
          
          bb.jpgs = gsub(".*(http.*?.jpg).*","\\1", head(bb))
          
          dir.create("c:/r4r")
          
          lapply(bb.jpgs, function(fn){
            curl::curl_download(fn, destfile = paste0("c:/r4r/",basename(fn)))
          })

          junfei
          时间的话

          在help("DateTimeClasses")里写的是

          mon
          0–11: months after the first of the year.

          如果要提取时间,建议使用lubridate包,

          比如

          lubridate::month(strptime("1994-9-22", format = "%Y-%m-%d"))
          #> [1] 9

          <sup>Created on 2019-03-31 by the reprex package (v0.2.1)</sup>

            junfei 在我这里测试,只要把 curl 的路径加到系统的环境变量里,就迎刃而解了。照tctcab 给的链接做就行。

            tctcab 我觉得不算复杂,作为 R 语言的 Windows 用户,还是应该了解一下为好,说不定就被逼进了 linux 阵营。

            method 上面我说了,用别的值在windows下载的图片打不开。

              junfei 不相关的问题最好新开一帖。月份是从 0 算起的。不知道为什么。

              tctcab 我是能不用额外包就不用。
              format(strptime("1994-9-22", format = "%Y-%m-%d"), format = "%m") 就够了吧。

              dapengde 已把curl路径加到了系统的环境变量中D:\CRUL\curl-7.64.1-win64-mingw\bin\curl.exe,然后试运行了代码,发现还是老样子报错!这个问题还竟无可奈何呀!

                junfei

                按我上面的代码装curl包试试,应该会自动帮你弄好curl路径什么的

                  junfei

                  要添加的路径应该是 D:\CRUL\curl-7.64.1-win64-mingw\bin\,不是 D:\CRUL\curl-7.64.1-win64-mingw\bin\curl.exe。

                  添加完之后在 cmd 里运行一下 curl。如果能运行,说明添加成功了。

                    tctcab 摁摁,安装了curl包后可以正常下载图片了,谢谢您啦!时间提取包我会去尝试的,谢谢前辈您的指点啦!
                    dapengde 也非常谢谢赵老师的悉心指点!对于默认的月份都是从0开始的话那也就不足为奇了,只是对初学的我来说确实也是疑惑了些!现在明了,谢谢您!

                    dapengde
                    摁,按您指点改了路径之后在cmd中运行了...\bin\curl.exe,显示出如下一行代码:
                    curl:try ‘curl--help’ or 'curl--manual' for more information
                    然后在Rstudio中运行之前代码,报错依旧不肯罢休呢!

                    > bb
                    [1] NA
                    > length(bb)
                    [1] 1

                      dapengde
                      cmd 只运行curl的话,则运行不了!显示:curl不是内部或外部命令,也不是可运行的程序或批处理文件

                        junfei 这说明你的curl路径没有正确添加到环境变量里。上面我说了:

                        添加完之后在 cmd 里运行一下 curl。如果能运行,说明添加成功了。

                        添加路径到环境变量的方法,网上随便一搜一大堆。这里简述如下:

                        1. 选中“此电脑”,右键选择“属性”,点击左侧“高级系统设置”,接着点击“高级”下的“环境变量”。
                        2. 选中“系统变量”窗口里的“path”,点击“编辑”,然后点击“新建”。
                        3. 将你的 curl.exe 文件所在文件夹的完整路径粘进去。举例来说,假如你的 curl.exeD:\CRUL\curl-7.64.1-win64-mingw\bin\curl.exe,那么路径就是 D:\CRUL\curl-7.64.1-win64-mingw\bin\。点击确定。至此,已经添加完毕。
                        4. 为了保险起见,测试一下是否添加成功。点击 windows 开始菜单的 windows 小图标,输入 cmd,回车,会打开命令提示符窗口。输入 curl,回车,如果出现 curl:try ‘curl--help’ or 'curl--manual' for more information,则说明添加成功。

                        windows 10 按上述步骤操作就行。 windows 7 及更早的版本,在上面第 3 步之后需要重启一下 windows 才能生效。

                        添加路径到环境变量的意义在于,你的 curl.exe 虽然住进硬盘里了,但 Windows 不认识去它家的路。添加路径到环境变量之后,你再让 Windows 去找 curl.exe,Windows 就知道路了。

                          dapengde 更改标题为「download.file() 无法下载网络图片

                          dapengde 我现在curl运行出现curl:try ‘curl--help’ or 'curl--manual' for more information了!
                          然后运行代码情况依旧!似乎进入了curl的家门,家长意见很大呀,是不是没带礼物呀?哈哈

                          > urlink <- 'http://www.biomet.co.at/pictures/'
                          >  aa <- readLines(urlink, encoding = 'UTF-8')
                          Warning message:
                          In readLines(urlink, encoding = "UTF-8") :
                            incomplete final line found on 'http://www.biomet.co.at/pictures/'
                          >  linkformat <- 'src = "http://www.biomet.co.at/wp/wp-content/gallery'
                          >  bb <- aa[grep(linkformat, aa)]
                          >  
                          >    for(i in 1:length(bb))
                          +        bb[i] <- substring(
                          +            bb[i],
                          +            regexpr("http", bb[i])[1],
                          +            regexpr(".jpg\"", bb[i])[1] + 3)
                          >   
                          >  bb <- unique(bb)
                          >  bb
                          [1] NA
                          >  length(bb)
                          [1] 1

                          这一问题在下载其它文件时(先后换了几种能用的镜像站点)也有打不开链接的情况,不知这是否属于同一种情况呢?代码如下:

                          > if(!require(devtools))  install.packages("devtools")
                          > devtools::install_github('rstudio/blogdown')
                          Downloading GitHub repo rstudio/blogdown@master
                          Error in utils::download.file(url, path, method = download_method(), quiet = quiet,  : 
                            cannot open URL 'https://api.github.com/repos/rstudio/blogdown/tarball/master'

                          在运行这一代码不成后,我试下载了其它的R包,发现下载其它包时能正常下载安装。