在很多时候,如仿站或是想扒别人的网站模板的时候,我们需要获取别人网站上面的图片,别人网站上面的图片N多,要一个个的查看代码下载,那非常的麻烦,今天我就教大家利用php去批量获取网页所有图片URL地址的一个方法,说白了就是利用PHP去采集别人网站上面的图片。
采集图片的基本流程,首先要获取到网页代码,然后用正则去获取图片的url地址,最后用获取到的地址去一张张下载图片就可以了。
首先我们先获取指定网页的html代码
//curl
function http_request_json($url,$post_data = NULL)
{
set_time_limit(2);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
if (isset($post_data)){
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS,20);
$result[1] = curl_exec($ch);
$result[0]= curl_getinfo($ch,CURLINFO_HTTP_CODE);
curl_close($ch);
ksort($result);
return $result;
}
$url='https://blog.csdn.net/wwyxhqc_zy/article/details/70213635';
$return=http_request_json($url);
到这里我们已成功获取到了批定网页的html代码,我上面的获取函数返回的是一个数组,$return[0]是获取的网页状态码,我们首先来判断状态码是否正常,也就是返回的是否是200,如果不是200则代码停止运行。
if ($return[0]!=200)
{
exit;
}
然后把$return[1]赋值给$str,这样我们方便对变量$str进行操作,在操作前把$return数组占用的内存给回收一下,若在这里不回收,可能有时在批量采集图片时会造成php大量的占用内存的情况发生,我们对$str进行正则来提取所有的图片url地址。
$str=$return[1];
$return=null;
$p = '//i'; //修改,2019年3月16日 19:45:30,赵
preg_match_all($p, $str, $matches);
上面的$matches数组便是我们正则获取到的相关图片信息,这是一个二维数组,我们打印可以看出$matches[1]是我们本次提取到的所有图片地址的url。
Array
(
[0] => Array
(
[0] => ,然而这是没有什么用的,于是,我从头开始检查了一遍会出现问题的地方,不出一会,找到了,原来是服务没有开启的原因,现在整理一下共勉
[1] =>
[2] =>
[3] =>
[4] =>