PHP通过正则表达式下载图片到本地的实现代码

   2015-11-13 0
核心提示:PHP通过正则表达式下载图片到本地的实现代码,主要是通过正则表达式匹配网页内容中的图片地址并下载。
复制代码 代码如下:

<?php
/*
author: ssh_kobe
date: 20110602
shortage: 如果网页中的图片路径不是绝对路径,就无法抓取
*/
set_time_limit(0);//抓取不受时间限制

$URL='http://pp.baidu.com/';//任意网址

get_pic($URL);

function get_pic($pic_url) {
//获取图片二进制流
$data=CurlGet($pic_url);
/*利用正则表达式得到图片链接*/
$pattern_src = '/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg]))[\'|\"].*?[\/]?>/';
$num = preg_match_all($pattern_src, $data, $match_src);
$arr_src=$match_src[1];//获得图片数组
get_name($arr_src);

echo "<br>finished!!!";
return 0;
}

/*得到图片类型,并将其保存到与该文件同一目录*/
function get_name($pic_arr)
{
//图片类型
$pattern_type = '/(/.(jpg|bmp|jpeg|gif|png))/';

foreach($pic_arr as $pic_item){//循环取出每幅图的地址
$num = preg_match_all($pattern_type, $pic_item, $match_type);
$pic_name = get_unique().$match_type[1][0];//改时微秒时间戳命名
//以流的形式保存图片
$write_fd = @fopen($pic_name,"wb");
@fwrite($write_fd, CurlGet($pic_item));
@fclose($write_fd);
echo "[OK]..!";
}
return 0;
}

//通过微秒时间获得唯一ID
function get_unique(){
list($msec, $sec) = explode(" ",microtime());
return $sec.intval($msec*1000000);
}

//抓取网页内容
function CurlGet($url){
$url=str_replace('&','&',$url);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);

//curl_setopt($curl, CURLOPT_REFERER,$url);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; SeaPort/1.2; Windows NT 5.1; SV1; InfoPath.2)");
curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 0);
$values = curl_exec($curl);
curl_close($curl);
return $values;
}
?>
 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • VB中的正则表达式 vb 正则表达式
    RegExp对象提供简单的正则表达式支持功能。  RegExp对象的用法:Function RegExpTest(patrn, strng)Dim regEx, Match, Matches ' 建立变量。Set regEx = New RegExp ' 建立正则表达式。regEx.Pattern = patrn ' 设置模式。regEx.IgnoreCase = True ' 设置是
    02-09
  • [perl] 正则表达式实现多模式匹配
    普通青年    3   文艺青年    3   二逼青年    8普通男友    5   文艺男友    2   二逼男友    9090  1 use strict;  2 use warnings;  3 my %hash = ();  4 my $line = "";  5 open FIN, "$ARGV[0]" or die "cannot open in
    02-09
  • Perl 正则表达式语法
    1. 概要Perl正则表达式是Boost.regex 默认行为,也可以将perl传入basic_regex 构造。boost::regex  e1(my_expression);boost::regex  e2(my_expression,  boost::regex::perl  |  boost::regex::icase);2. 特殊字符. [ { ( ) \ * + ? | ^ $3. 通配符 ‘
    02-09
  • Perl中的正则表达式(五) Perl正则
    正则表达式(Regular Expression),在Perl里边通常也叫做模式(Pattern),用来表示匹配(或不匹配)某个字符串的特征模板。 使用简单模式:若模式匹配的对象是$_的内容,只要把模式写在一对斜线(/)中就可以了。         $_ = "yabba dabba doo";
    02-09
  • 20-Perl 正则表达式
    1.Perl 正则表达式正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。Perl语言的正则表达式功能非常强大,基本上是常用语言中最强大的,很多语言
    02-09
  • 在perl正则表达式中使用变量
    在变量两端应该加上\Q和\E进行消元,如下:$b=~/\Q$a\E/避免变量中存在的元字符产生影响
    02-09
  • matlab 正则表达式
    Replace text using regular expressioncollapse all in pageSyntaxnewStr = regexprep(str,expression,replace)examplenewStr = regexprep(str,expression,replace,option1,...optionM)exampleDescriptionexamplenewStr = regexprep(str,expression,replace
    02-09
  • R语言中的正则表达式(转载:http://blog.csdn.
    转载:http://blog.csdn.net/duqi_yc/article/details/9817243目录Table of Contents1 正则表达式简介2 字符数统计和字符翻译2.1 nchar和length2.2 tolower,toupper和chartr3 字符串连接3.1 paste函数4 字符串拆分4.1 strsplit函数5 字符串查询:5.1 grep和g
    02-09
  • R语言-正则表达式 r语言正则表达式提取位于中间
    R语言中正则表达式内容概览  有时候我们要处理的是非结构化的数据,例如网页或是电邮资料,那么就需要用R来抓取所需的字符串,整理为进一步处理的数据形式。R语言中有一整套可以用来处理字符的函数,在之前的 博文 中已经有所涉及。但真正的要用好字符处理
    02-09
  • 一步一步学Ruby(九):Ruby正则表达式(上)
    一步一步学Ruby(九):Ruby正则表达式(上)
    先推荐一个在线的Ruby正则表达式编辑器http://www.rubular.com/ Ruby的正则表达式以"//"作为构造方法。表达式返回一个RegExp的对象。  一般规则:   /a/匹配字符a。      /\?/匹配特殊字符?。特殊字符包括^, $, ? , ., /, \, [, ], {, }, (, ), +, *. 
    02-09
点击排行