PHP+Ajax远程图片抓取器

PHP+Ajax远程图片抓取器

分享一款自己写的PHP远程图片抓取器,巩固巩固所学的知识,有些功能还待完善,以后有时间再更新。采用PHP、jquery、ajax组合完成无刷新的远程图片抓取,可抓取网页图片、CSS样式文件的URL,指定目标地址图片抓取,保存目录可自己指定,抓取成功后返回保存路径及大小。

20131113231419

20131114001558

实现原理

发送请求 :将输入的目标网址及保存路径名称采用AJAX异步的方式发送到image.info.php文件,该文件中包含有一个ImageCatch类,注意:因为有一个是指定目标图片抓取,一个是只要指定一个网址,如http://www.web-fish.com形式,所以还要有一个参数用来判断是指定目标抓取还是指定网站抓取。

接收请求 :接收发送过来的两个参数,目标网址及保存路径,实例化ImageCatch类,将地址及保存路径传进去,用file_get_contents函数将目标地址的内容读取赋值给一个变量$content。

先说指定图片抓取的实现 :指定图片抓取的方法实现比较简单,直接用file_get_contents函数将图片读取到,再用file_put_contents写入到一个文件保存起来就可以了。

指定网址抓取图片的实现

方法跟指定图片地址抓取就有点不一样了,因为采用的是jquery+ajax无刷新模式抓取,所以,请求要一次一次发,先说第一次发什么请求,很显然,第一次发的请求内容是获取目标网址的所有图片地址及图片总数,那要怎样获取目标网址的所有图片地址呢?思路跟上面的一样,但方法不同;

第一步:用file_get_contents函数读取目标网址赋值给一个content变量。

第二步:用正则匹配所有img标签里的src属性,并保存在一个数组,这样网页的图片地址就已经拿到了

第三步:用正则匹配所有样式表文件link标签的href属性,并保存在一个数组$arr1

第四步:还是用file_get_contents函数读取获取的样式表文件,再用正则去匹配到css样式里的url背景图片地址,并保存在一个数组$arr2,这样css样式的图片又拿到了

第五步:将$arr1和$arr2用array_merge函数进行合并成$arr,再用一个数组$arr3(‘total’=>count($arr))得出图片总数并追加到数组$arr里面去,这样图片地址和总数都拿到了

第六步:用json_encode编译一个返回json数据 第七步:接收返回回来的json数据,将数据都存入一个数组,判断是否数组为空,不为空,则用函数递归的方法调用一个函数,每调用一次,在返回结果后就将该数组的第一个元素去掉,再判断数组是否为空,不为空,则继续发送抓取请求,直到数组为空,全部图片就已经都抓取完毕。

说了这么多,感觉说得不清不楚,其实还有很多细节没说,像正则匹配、判断图片地址中是否包含完整的http://等等,不过没办法,写作水平有限,有兴趣的看官可以下载DEOM来瞧瞧,代码都有注释,这样应该更明白一点。

感觉有个地方还不怎么好,就是用匹配IMG标签的正则,有些特殊的img标签写法抓取不了,希望如果知道的看官可以分享分享,告诉我一下,非常感激。

xia

分享到:
标签:php+ajax,PHP图片抓取,
^_^ 亲爱的客官,如果您觉得本文对您有好处,请移动你的鼠标点点下面的广告或上面的或右上角的,非常感谢~ ^_^

PHP+Ajax远程图片抓取器:目前有3 条留言

  1. 板凳
    http://www.jinjingteng.com:

    持续关注中

    2013-11-24 上午 1:26
    • 谢谢关注~!

      2013-11-25 上午 9:52
  2. 已经很不错了!!

    2013-11-14 下午 9:16