background image

php 获取网页内的图片地址正则表达式

获取网页中的图片地址并保存下载我们需要采集页面,然后再利用正则表达式获取页

面中的图片

url,然后我们再通过相关的 php 函数把图片保存到指定本地硬盘了。

1. 获取地址

这个功能最主要的就是用正则表达式来匹配页面源码里的图片地址了,这里用到得正则表

是:
代码如下
/<img.*src="(.*)"\s*.*>/iU
首页通过

PHP 自带的读取文件函数来获得请求页面的 html 代码,然后用正则表达式来

匹配里面的

src 地址,这里有两个注意点:

file_get_content
只能获取到静态的页面内容,也就是说如果你在页面里看到的是图片是通过

Javascript

来展示的,通过这个工具是获取不到图片信息的
有的网站对

file_get_content 这个函数做了些限制,如果不是通过浏览器打开的网页,服务

器是拒绝请求的,这个时候我们就需要给

php 程序添加一个配置信息,让采集的程序能够

模拟一个留言器的

UA(user agent),具体的做法可以通过下面的代码来实现://现在模拟

的是一个

Window 环境下的浏览器

ini_set('user_agent','Mozilla/4.0  (compatible;  MSIE  8.0;  Windows  NT  5.1;  Trident/4.0; 
4399Box.560; .NET4.0C; .NET4.0E)');
通过以上两点的处理,获取网页源码就没有问题了,唯一要做的就是用正则表达式对图片
地址的匹配。

例子

1

代码如下
/**

 * 获取替换文章中的图片路径
 * @param string $xstr 内容 采集网页的 content
 * @param string $keyword 创建照片的文件名 我写 upimg
 * @param string $oriweb 网址 一般写 null
 * @return string
 *
 */
function replaceimg($xstr,$keyword, $oriweb){
 $basedir = dirname(__FILE__);
 
    //保存路径
    $d = date('Ym', time());
    $dirslsitss = $basedir.'/../uploads/'.$keyword.'/'.$d;//分类是否存在
    if(!is_dir($dirslsitss)) {
        @mkdir($dirslsitss, 0777);
    }
 
    //匹配图片的 src
    preg_match_all('#<img.*?src="([^"]*)"[^>]*>#i', $xstr, $match);