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);
 
    foreach($match[1] as $imgurl){
 
        $imgurl = $imgurl;
 
        if(is_int(strpos($imgurl, 'http'))){
            $arcurl = $imgurl;
        } else {
            $arcurl = $oriweb.$imgurl;       
        }
        $img=file_get_contents($arcurl);
 
 
        if(!empty($img)) {
 
            //保存图片到服务器
            $fileimgname = time()."-".rand(1000,9999).".jpg";
            $filecachs=$dirslsitss."/".$fileimgname;
            $fanhuistr = file_put_contents( $filecachs, $img );
            $saveimgfile = "/uploads/$keyword"."/".$d."/".$fileimgname;
 
 
            $xstr=str_replace($imgurl,$saveimgfile,$xstr);
        }
    }
    return $xstr;
}

可能有些朋友也知道file_get_contents性能不怎么样,我们可使用curl来获取

 代码如下 复制代码

/*
*功能:php完美实现下载远程图片保存到本地
*参数:文件url,保存文件目录,保存文件名称,使用的下载方式
*当保存文件名称为空时则使用远程文件原来的名称
*/
function getImage($url,$save_dir='',$filename='',$type=0){
    if(trim($url)==''){
  return array('file_name'=>'','save_path'=>'','error'=>1);
 }
 if(trim($save_dir)==''){
  $save_dir='./';
 }
    if(trim($filename)==''){//保存文件名
        $ext=strrchr($url,'.');
        if($ext!='.gif'&&$ext!='.jpg'){
   return array('file_name'=>'','save_path'=>'','error'=>3);
  }
        $filename=time().$ext;
    }
 if(0!==strrpos($save_dir,'/')){
  $save_dir.='/';
 }
 //创建保存目录
 if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){
  return array('file_name'=>'','save_path'=>'','error'=>5);
 }
    //获取远程文件所采用的方法
    if($type){
  $ch=curl_init();
  $timeout=5;
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
  $img=curl_exec($ch);
  curl_close($ch);
    }else{
     ob_start();
     readfile($url);
     $img=ob_get_contents();
     ob_end_clean();
    }
    //$size=strlen($img);
    //文件大小
    $fp2=@fopen($save_dir.$filename,'a');
    fwrite($fp2,$img);
    fclose($fp2);
 unset($img,$url);
    return array('file_name'=>$filename,'save_path'=>$save_dir.$filename,'error'=>0);
}

时间: 2024-08-31 15:34:41

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

C# winform webbrowser 怎么获取网页内框架的链接地址

问题描述 C#winformwebbrowser怎么获取网页内框架的链接地址webBrowser1.Document.Window.Frames.Count可以得到网页的框架数量webBrowser1.Document.Window.Frames[0].Document.Url.ToString();出现以下错误:"System.UnauthorizedAccessException"类型的未经处理的异常在System.Windows.Forms.dll中发生其他信息:拒绝访问.(异常

js 获取内容中图片地址正则表达式

js 获取内容中图片地址正则表达式 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-eq

怎么获取网页内框架的链接地址

问题描述 怎么获取网页内框架的链接地址webBrowser1.Document.Window.Frames.Count可以得到网页的框架数量webBrowser1.Document.Window.Frames[0].Document.Url.ToString();出现以下错误:"System.UnauthorizedAccessException"类型的未经处理的异常在System.Windows.Forms.dll中发生其他信息:拒绝访问.(异常来自HRESULT:0x8007000

如何获取网页中按钮的地址?

问题描述 如何获取网页中按钮的地址? 例如http://contest.i21st.cn/zhuanti/20th/final.php?from=timeline&isappinstalled=0这个网页中第8个人..恳请请答 解决方案 分析页面dom.用tag,名称等来查找.都可以找到. 解决方案二: 获取网页,直接用正则表达式提取. 解决方案三: 推荐Jsoup,可以根据html标签来提取数据内容

在C#中如何获取网页的验证码链接地址

问题描述 在C#中如何获取网页的验证码链接地址 在C#中如何获取网页的验证码链接地址,比如我想通过在C#窗体中点击获取验证码按钮,得到网页的验证码. 解决方案 你是指验证码图片还是验证码的字符串? 如果是验证码图片,那么一般验证码的图片都是有个链接的,你先获取到这个链接然后将这个链接拼接到当前地址后面(或者当前地址的上一级). 然后通过WebClient的DownloadFile方法下载验证码图片... 如果你想要获取验证码字符串就必须自己想办法识别了...简单的验证码可以通过调用第三方识别引擎

网页开发-c# webbrowser 获取网页内的超连接

问题描述 c# webbrowser 获取网页内的超连接 大神们看下面代码,是webbrowser的,上面的点击可以执行,但是没办法获取到对应文字的链接: if (webBrowser1.Document.All[i].OuterText == textBox1.Text) { webBrowser1.Document.All[i].InvokeMember("click"); } 我想获得i文字的超连接要怎么获得呢? object url1 = webBrowser1.Documen

js-如何获取网页内封装的数据

问题描述 如何获取网页内封装的数据 应该如何获取这样一个网页,其中表格里面的那些数据呢? 我希望可以获取这些数据,然后通过处理将它显示在程序中,但是我查看了网页的源码,这些数据并没有直接出现,是封装在什么地方吗? 我应该怎样获取这些数据呢? 网页源码如图,表格中的数据是封装在哪里?又应该通过什么方式获取呢? 解决方案 可能是框架网页,或者ajax异步加载的,用fiddler看下,照着写. 解决方案二: 用javascript动态生成的,用webbrowser等可以获取到页面内容. 解决方案三:

php获取CSS文件中图片地址并下载到本地的方法_php技巧

本文实例讲述了php获取CSS文件中图片地址并下载到本地的方法.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: /**  * 获取CSS中图片地址,并且保存到本地  */ class getInCssImage {            /**           *  图片保存下来          * @param $cssUrl css的url地址          * @param $dir 保存图片的目录          * @return void        

c#获取网页中的图片已实现,如何不通过点击按钮让图片自动绑定到picturebox中

问题描述 c#获取网页中的图片已实现,如何不通过点击按钮让图片自动绑定到picturebox中也就是说,利用webborwse获取网页信息后,不通过任何操作就可以让图片显示到pixturebox中 解决方案 解决方案二:在webBrowser的DocumentCompleted事件中添加就行.解决方案三:你是如何通过点击按钮过去图片的.还是用同样的方法呀,就在1楼说的那个事件里,下载图片就行了.