在很多时候,如仿站或是想扒别人的网站模板的时候,我们需要获取别人网站上面的图片,别人网站上面的图片N多,要一个个的查看代码下载,那非常的麻烦,今天我就教大家利用php去批量获取网页所有图片URL地址的一个方法,说白了就是利用PHP去采集别人网站上面的图片。
采集图片的基本流程,首先要获取到网页代码,然后用正则去获取图片的url地址,最后用获取到的地址去一张张下载图片就可以了。
- 首先我们先获取指定网页的html代码
<?php
//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 = '/<img.*[\s]src=[\"|\'](((http:\/\/|https:\/\/|\/\/)+?)(.*?)(\.(png|jpg|jpeg|bmp|gif)?))[\"|\'|\?](.*?)>/i'; //修改,2019年3月16日 19:45:30,赵
preg_match_all($p, $str, $matches);
上面的$matches数组便是我们正则获取到的相关图片信息,这是一个二维数组,我们打印可以看出$matches[1]是我们本次提取到的所有图片地址的url。
Array
(
[0] => Array
(
[0] => <img alt="大哭" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/wail.gif" />,然而这是没有什么用的,于是,我从头开始检查了一遍会出现问题的地方,不出一会,找到了,原来是服务没有开启的原因,现在整理一下共勉<img alt="微笑" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif" />
[1] => <img class="show_loginbox" src="//g.csdnimg.cn/static/user-img/anonymous-User-img.png">
[2] => <img src='https://csdnimg.cn/release/phoenix/images/feedLoading.gif'>
[3] => <img src="https://avatar.csdn.net/B/A/E/3_wwyxhqc_zy.jpg" class="avatar_pic">
[4] => <img src="http://img-ads.csdn.net/2019/201901081438577084.png"width="100" height="100"><h6>程序员2019年学Python</h6></div></a></div></li> <li><div id="kp_box_457" data-pid="457" data-track-view='{"mod":"kp_popu_457-681","con":",,"}' data-track-click='{"mod":"kp_popu_457-681","con":",,"}'><img src="http://img-ads.csdn.net/2019/201901081453403307.jpg"width="100" height="100"></div></li> <li><div id="kp_box_458" data-pid="458" data-track-view='{"mod":"kp_popu_458-640","con":",,"}' data-track-click='{"mod":"kp_popu_458-640","con":",,"}'><a href="https://gitchat.csdn.net/column/5a7d1a13a7f22b3dffca7e49?utm_source=csdn100" target="_blank"><div class="blogkp3"><img src="http://img-ads.csdn.net/2018/201811091452349556.png"width="100" height="100"><h6>Python 爬虫和数据分析实战</h6><span style="position:absolute;right:0;bottom:0;background:url(https://img-ads.csdn.net/2016/201608021757063065.png) no-repeat;width:33px;height:18px;display:block;z-index: 9999;"></span></div></a></div></li> <li><div id="kp_box_459" data-pid="459" data-track-view='{"mod":"kp_popu_459-684","con":",,"}' data-track-click='{"mod":"kp_popu_459-684","con":",,"}'><img src="http://img-ads.csdn.net/2018/201811231419286183.jpg"width="100" height="100">
)
[1] => Array
(
[0] => http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif
[1] => //g.csdnimg.cn/static/user-img/anonymous-User-img.png
[2] => https://csdnimg.cn/release/phoenix/images/feedLoading.gif
[3] => https://avatar.csdn.net/B/A/E/3_wwyxhqc_zy.jpg
[4] => http://img-ads.csdn.net/2018/201811231419286183.jpg
)
[2] => Array
(
[0] => http://
[1] => //
[2] => https://
[3] => https://
[4] => http://
)
[3] => Array
(
[0] => http://
[1] => //
[2] => https://
[3] => https://
[4] => http://
)
[4] => Array
(
[0] => static.blog.csdn.net/xheditor/xheditor_emot/default/smile
[1] => g.csdnimg.cn/static/user-img/anonymous-User-img
[2] => csdnimg.cn/release/phoenix/images/feedLoading
[3] => avatar.csdn.net/B/A/E/3_wwyxhqc_zy
[4] => img-ads.csdn.net/2018/201811231419286183
)
[5] => Array
(
[0] => .gif
[1] => .png
[2] => .gif
[3] => .jpg
[4] => .jpg
)
[6] => Array
(
[0] => gif
[1] => png
[2] => gif
[3] => jpg
[4] => jpg
)
[7] => Array
(
[0] => /
[1] =>
[2] =>
[3] => class="avatar_pic"
[4] => width="100" height="100"
)
)
利用for把获取到的图片地址全部打印出来;
for($i=0;$i<count($matches[1]);++$i)
{
echo $matches[1][$i].'<br/>';
}
以下便是我们利用php正则提取到的所有图片的url地址
http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif
//g.csdnimg.cn/static/user-img/anonymous-User-img.png
https://csdnimg.cn/release/phoenix/images/feedLoading.gif
https://avatar.csdn.net/B/A/E/3_wwyxhqc_zy.jpg
http://img-ads.csdn.net/2018/201811231419286183.jpg
当然在这里我们可以通过提取到的url地址把图片下载存放到本地,今天有些忙,就写到这里,图片下载到本地的方法我有时间再分享给大家。
最新评论
感谢
能不能屏蔽掉刷流量的,统计工具显示全部都是
路过学习了
好像不太行啊 加载不出来啊
好文章
是否可以 实现 判断手机端跳转 而网址不变呢
你好
感谢分享,我也遇到这个了,根据你的提示,屏蔽掉了