超囧的图片链接批量获取和下载_PHP教程
以前在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)。
5) 无敌下载器
到这快要结束了,也许有人问我,你这不还是没有实现下载图片吗?嘿嘿,nb人物要登场了:wget -i -b urls.txt 。在终端里面进入网站目录,执行该命令,自动后台下载文本文件里面的每一行的图片地址。
PS:前几天对这个命令不熟悉,拿一H网做实验,误用了参数在后台默默的下载了1.1G的黄图,后来发现了强行kill了该进程。总之这个命令下载网站内容那是强悍到不行。 如果你用linux,这个命令很邪恶,想干坏事到了个位哦!
6) 能不囧吗?
这个操作流程,真的很囧。
囧一:a)部署好本地的网站--》b)右键打开chrome控制台或者firebug--》c)复制脚本--》d)粘贴--》e)Enter--f》打开终端--g》wget。这个操作对于一个页面很多图片(缩略图,套图)的网页来说,很便利。但是如果我打开了十个网页,每个页面就都要执行b和d以及e操作,如果这段脚本能够做成chrome插件嵌入到浏览器中那么至少可以省下2步:打开页面手动点一下插件图标或者设置为自动执行脚本。这样易用性就大大提升了。
囧二:如何省去wget这一步,直接在php后台执行下载。这就需要考虑使用php调用ubuntu系统方法了,不熟,有待研究。
囧三:如何省去部署网站这一步,需要网站的根本原因是我无法将多个页面的图片地址合并存储在一起,考虑过cookie但是大小限制是个问题,图片地址过百很正常(尤其是包含中文的时候)。而且还要考虑存储后方读取便调用的问题。
这几个问题还没有考虑好,现在只是在考虑实现囧二。其实这个过程对技术本身没有多大提升,但是后来回想整个流程,发现对面对问题时的思路和方法论上面都有了明显的提高。欢迎大家来讨论!
摘自 Hurry的专栏

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









Node.js 환경에서 403을 반환하는 타사 인터페이스의 문제를 해결하십시오. Node.js를 사용하여 타사 인터페이스를 호출 할 때 때때로 403을 반환하는 인터페이스에서 403의 오류가 발생합니다 ...

OKX 트레이딩 플랫폼은 모바일 장치 (Android 및 iOS) 및 컴퓨터 (Windows 및 MacOS)를 통해 다운로드 할 수 있습니다. 1. Android 사용자는 공식 웹 사이트 또는 Google Play에서 다운로드 할 수 있으며 보안 설정에주의를 기울여야합니다. 2. iOS 사용자는 앱 스토어를 통해 다운로드하거나 공식 발표를 따라 다른 방법을 얻을 수 있습니다. 3. 컴퓨터 사용자는 공식 웹 사이트에서 해당 시스템의 클라이언트를 다운로드 할 수 있습니다. 설치 후 다운로드 할 때 항상 공식 채널을 사용하고 등록, 로그인 및 보안 설정을 사용해야합니다.

노드 환경에서 403 오류를 반환하는 타사 인터페이스를 피하는 방법. node.js를 사용하여 타사 웹 사이트 인터페이스를 호출 할 때 때때로 403 오류를 반환하는 문제가 발생합니다. � ...

비교 및 동기화의 문제점을 넘어서는 파일을 비교하고 동기화하는 문제 : Beyond를 사용할 때의 경우 민감도 실패 ...

내 코드가 API에 의해 데이터를 반환 할 수없는 이유는 무엇입니까? 프로그래밍에서 우리는 종종 API가 호출 될 때 NULL 값을 반환하는 문제를 겪는 경우가 종종 있습니다.

데비안 시스템 로그 모니터링 마스터 링은 효율적인 운영 및 유지 보수의 핵심입니다. 시스템의 작동 조건을 적시에 이해하고 결함을 신속하게 찾아 시스템 성능을 최적화하는 데 도움이됩니다. 이 기사는 일반적으로 사용되는 몇 가지 모니터링 방법 및 도구를 소개합니다. SYSSTAT 툴킷을 사용한 시스템 리소스 모니터링 SYSSTAT 툴킷은 CPU로드, 메모리 사용량, 디스크 I/O, 네트워크 처리량 등 다양한 시스템 리소스 메트릭을 수집, 분석 및보고하기위한 일련의 강력한 명령 라인 도구를 제공합니다. 주요 도구에는 다음이 포함됩니다. SAR : CPU, 메모리, 네트워크 등의 종합 시스템 자원 통계 도구 등이 포함됩니다. MPSTAT : 멀티 코어 CPU 통계. 피드 스타

Windows System Logs의 효율적인 읽기 : Bython을 사용하여 Windows System Log 파일 (.EVTX)을 처리 할 때 EVTX 파일을 역전시킵니다. 직접 읽기는 가장 빠른 것입니다 ...

언어의 멀티 스레딩은 프로그램 효율성을 크게 향상시킬 수 있습니다. C 언어에서 멀티 스레딩을 구현하는 4 가지 주요 방법이 있습니다. 독립 프로세스 생성 : 여러 독립적으로 실행되는 프로세스 생성, 각 프로세스에는 자체 메모리 공간이 있습니다. 의사-다일리트 레딩 : 동일한 메모리 공간을 공유하고 교대로 실행하는 프로세스에서 여러 실행 스트림을 만듭니다. 멀티 스레드 라이브러리 : PTHREADS와 같은 멀티 스레드 라이브러리를 사용하여 스레드를 만들고 관리하여 풍부한 스레드 작동 기능을 제공합니다. COROUTINE : 작업을 작은 하위 작업으로 나누고 차례로 실행하는 가벼운 다중 스레드 구현.
