批量下载网页上的图片

新工作单位的网页做得简洁大方,ctrl+u一看网页源代码,发现竟然是拿wordpress建的。网站下面有个图片展示页面,展示的是我们这个研究组的野外观测照片缩略图,按站点分了类。作为一个新来的,自然要把本组的工作了解一番;看图的时候,需要逐个点开才能看大图,不如下载到本地方便。但是这几百张图,一一点开下载也太累了。如何批量下载网页上的图片呢?

方案有很多,列举如下:

  1. 可以通过浏览器的’保存网页全部内容’来实现,本地生成一个文件夹,包含了网页上的图片。这个我试了,但只保存下来了缩略图,没有大图。
  2. 可以安装迅雷、快车之类的软件,但是我不想装。有些软件臃肿庞大也就算了,关键是不知道他们在背后悄悄做了些什么。另外,他们无法解决图片分类的问题,详见第4条。
  3. 傲游、360等浏览器有批量下载功能,或者firefox+BatchDownload 插件也行,但我不想装,并且他们也无法解决图片分类的问题。我只用chrome。
  4. chrome有个fatkun插件,专门用来批量下载图片,能下载大图,是我最满意的方案了,但也并非完美。下载的图片文件名要么是原始文件名,要么只能简单编号。这样一来,所有观测站点的图片都混在了一起,这仍然不是我想要的。我希望下载到本地的图片能自动按观测站分类保存。

其实,每张图片所属站点的信息,包含在了图片的链接里。比如Neustift观测站某图的链接是:

http://www.biomet.co.at/wp/wp-content/gallery/neustift/img_8260_59_58_tonemapped_a1_w3000px.jpg

这个链接里是含有站名信息的。这就好办了,可以自己动手用代码实现。

R代码好久不写,手都生了。下面是我写的R代码,先是从网页源代码里获取图片的下载链接,然后从链接中截取站名,并为下载到本地的图片重命名,只需要十几行。这个代码比较笨,如果我还能记得R里的正则表达式,就可以写得更漂亮些。

dir.create('d:\\dapengde')
setwd('d:\\dapengde')
linkformat <- 'src="http://www.biomet.co.at/wp/wp-content/gallery'
urlink <- 'http://www.biomet.co.at/pictures/'
aa <- readLines(urlink, encoding='UTF-8') # 读取网页
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)
filename <- substring(bb, 47, 50)

for (i in 1:length(bb)) # 逐行处理
{
  download.file(bb[i], paste(filename[i], i, '.jpg', sep = ""), method = 'curl', quiet = TRUE) # 下载网页
#   Sys.sleep(5)
}

批量下载网页上的图片》上有14条评论

      1. 勺子

        说什么荐呢,直接赏你一枚便好(我发球球离线文件给你了),那个主题是我花银子买的,也是简洁风,最主要移动端的效果超赞的。我把算一直延用我现在的主题,所以这一枚送给你了,接好。。。

        回复
        1. 大鹏 文章作者

          谢谢勺子!查邮件之前先打开QQ就收到了你的文件,我还以为是病毒……

        2. 大鹏 文章作者

          勺子,这个主题,尤其是移动端的效果,的确非常好。然而,我折腾了几天后,发现有些地方我玩不转,大概需要修改一些代码才能实现。可是我懒得折腾了,于是又换回了原来的主题。你提到的这个主题对移动端不友好,的确是个问题,眼下我用一款插件对此进行了改善,感觉还可以。你浏览时感受如何?如果能凑合,你这个主题我还是还给你吧,以便你赠送玩得转的人。谢谢你的美意。

        3. 马光

          前段的同样模板,我也遇到了同样的问题,WPtouch等插件都不好用,不知道怎么回事。所以,最后只能换回自带主题了。有空了再看看竟然怎么回事。

        4. 大鹏 文章作者

          自带主题挺好的。有朝一日大鹏志必然会回归到自带主题的。

    1. 大鹏 文章作者

      非也非也,不写代码的适合当领导,让下属写。

      回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax