欢迎光临
我们一直在努力

php7.3-正则提取网页中所有图片的url地址

在很多时候,如仿站或是想扒别人的网站模板的时候,我们需要获取别人网站上面的图片,别人网站上面的图片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地址把图片下载存放到本地,今天有些忙,就写到这里,图片下载到本地的方法我有时间再分享给大家。

赞(1) 打赏
原创文章转载请注明出处:爱编程 » php7.3-正则提取网页中所有图片的url地址
分享到: 更多

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

爱编程、一个运维兼程序员的博客!

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏