您现在的位置:计算机技术学习网 > 技术中心 > WEB编程 > PHP >

超囧的图片链接批量获取和下载

来源:未知 责任编辑:责任编辑 发表时间:2015-09-09 15:34 点击:

以前在windows下经常去一些壁纸网站,或者是美女的QQ相册,又或者是一个激情美女图片网站下载图片,经常需要点击右键然后“另存为”,要是遇见经典套图,这种重复的操作肯定会让你失去下载的动力。后来用了Firefox有个插件好像是DownloadThemAll(记得不清除了,反正就是批量下载网页链接的,可以筛选格式下载图片),结合迅雷使用可以极大的提高图片下载的效率(但是如果页面小图片过多,下完之后也需要很长时间来筛选删除废文件)。现在用了ubuntu,没有windows和迅雷,也不用firefox很多年了。我们如何来批量下载网页中的美图?在chrome下我一直想找这样一款插件,可惜只找到IMG inspector这个插件,这个插件的工作方式是定义一个基准URL,利用占位符,定义好的步长和循环范围来重新生成链接并预览。不得不说这样的功能是在太弱了,即使是套图的URL也不一定是有规律可循的,所以这种方法并不可取也不实用。
  于是后来琢磨着学学Chrome插件开发,自己来做一个 可惜一直没有什么动力。而且我也不清楚chrome插件能不能解决图片下载的问题:是调用客户端下载软件还是调用原生浏览器下载,而且这样一来,还得好好学习chrome的API的一些高级方法,开发成本顿增。遂放弃之。于是转换思路继续琢磨。然后把几个难点问题一一分拆开来分析(环境:UBUNTU+CHROME/FIREFOX):

  1)如何获取当前页面的图片地址?

  这个最简单的莫过于在chrome的控制台或者firebug中执行脚本程序了,我也想过利用网页爬虫工具比如SimpleHtmlDom这个强大的开源框架(如果你熟悉jquery这个框架让你在服务器端使用jquery获取标签,十分方便),不过这样可能执行的效率上差了一截。复杂性也增加了一些。

  2)如何确定当前页面的图片大小是否符合我的“胃口”?

  这个问题得分两种情况考虑:网页图片一般分为缩略图和原图。缩略图一般都附带原图链接。也就是用a标签包裹img标签,我们需要获取a标签的href值而不是img标签的src值;原图一般只是一个img标签,这样你可以利用Image对象的width和height来筛选这些图片。对于缩略图筛选可以new一个Image对象设置src的值以后对其高度和宽度进行筛选。不过对于缩略图我一般不筛选,这样的图片一般都是很大的,相反你最可能要筛选的是a标签里面的img对象,因为很多logo和button的图片都是链接包裹的小图片。

  3)如何下载图片?

   上面两步都是使用控制台的脚本程序来完成的,整个代码不超过10行(包含jquery相机加载的代码)。最后你可以不废吹灰之力得到当前页面筛选之后的图片的地址。可惜就在这一步了,得到了地址没有用,真正废操作的步骤在如何一次性的把这些图片下载到本地的机器。如果我会chrome插件开发,知道chrome如何调用系统的方法(其实我也不确定chrome是否可以,如果浏览器的安全限制足够严格那么这肯定是行不通的),然后熟悉下wget这个强悍无比的下载命令。这就迎刃而解了。遗憾的是,前两个我都不熟悉,不过没关系天无绝人之路,条条大道通罗马,一定会有另外一种方法的。

  4)飞越控制台Console

  现在我们的思路被卡在chrome的控制台里了,空有大把图片链接却不知道怎么下载他们(其实也只是当前窗口的图片链接)。对于chrome插件开发我始终抱有一丝幻想,可惜学习动力实在没有,而且自己也始终质疑chrome这么安全严格的浏览器会允许js与客户端交互吗?

  于是我开始退步思考问题了,不下载文件,直接把这些文件存储在本地的任何一个我能日后读取的地方就行。于是思路延续到html5 的本地存储localStorage和本地数据库,也考虑了Google Gears的本地数据库,后来发现要么搞得过于复杂,要么行不通。慢慢的思路开始朝着一个简单的方向漂移--jQuery,没错就是他--$.getJSON()。如果能够跨域将图片地址发到本地的一个网站然后在后台下载不就行了吗?于是马上用Code Igniter制作了一个网站:只在控制器里面加入了一个只有一个方法的php的控制器类文件,代码仍然不超过10行。代码的作用只是将所有的图片链接换行写入一个文本文件(urls.txt)。

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • PHP测试
  • 十天学会php之第六天
  • 查找数组中指定键名的值
  • 几种显示数据的方法的比较
  • 使用xmlhttp为网站增加域名查询功能
  • PHP+MYSQL+Javascript数据库查询结果的动态显示
  • 用redis实现跨服务器session
  • 用新浪微博接口发送图片微博失败的原因
  • smarty局部缓存技术[源码分析]
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1