• 技术文章 >后端开发 >php教程

    php正则表达式提取网页超链接url与网页中图片

    2016-07-25 08:52:57原创656
    1. function match_links($document) {
    2. preg_match_all("'<\s*a\s.*?href\s*=\s*([\"\'])?(?(1)(.*?)\\1|([^\s\>]+))[^>]*>?(.*?)'isx",$document,$links);
    3. while(list($key,$val) = each($links[2])) {
    4. if(!empty($val))
    5. $match['link'][] = $val;
    6. }
    7. while(list($key,$val) = each($links[3])) {
    8. if(!empty($val))
    9. $match['link'][] = $val;
    10. }
    11. while(list($key,$val) = each($links[4])) {
    12. if(!empty($val))
    13. $match['content'][] = $val;
    14. }
    15. while(list($key,$val) = each($links[0])) {
    16. if(!empty($val))
    17. $match['all'][] = $val;
    18. }
    19. return $match;
    20. }
    复制代码

    主要是正则的问题,下面给出个asp.net下的,多测试正则 获取页面的链接正则

    1. public string GetHref(string HtmlCode)
    2. {
    3. string MatchVale = "";
    4. string Reg = @"(h|H)(r|R)(e|E)(f|F) *= *('|"")?((\w|\\|\/|\.|:|-|_)+)('|""| *|>)?";
    5. foreach (Match m in Regex.Matches(HtmlCode, Reg))
    6. {
    7. MatchVale += (m.Value).ToLower().Replace("href=", "").Trim() + "||";
    8. }
    9. return MatchVale;
    10. }
    复制代码

    例2,php中通过正则表达式下载内容中的远程图片的函数代码

    用PHP正则表达式判断内容中的图片,下载并保存非本域名下的图片的程序 这段程序其实是属于“小偷程序”的重要部分。

    这一段程序只是下载远程图片的那一段。

    1. if (preg_match_all("/http://[^ "']+[.jpg|.gif|.jpeg|.png]+/ui",stripcslashes($content),$aliurl)){
    2. $i=0; //多个文件++
    3. while(list($key ,$v) = each($aliurl[0])){
    4. //echo $v."
      ";
    5. $filetype = pathinfo($v, PATHINFO_EXTENSION); //获取后缀名
    6. $ff = @file_get_contents($v); //获取2进制文件内容
    7. if(!stripos($v,"jbxue.com")){//判断是否是自己网站下的图片
    8. if (!empty($ff)){ //获取到文件就执行下面的操作
    9. $dir = "upload/".date("Ymd")."//m.sbmmt.com/m/";//指定新的存储路径
    10. if (!file_exists($dir)){//判断目录是否存在
    11. @mkdir($dir,511,true); //创建多级目录,511转换成十进制是777具有可执行权限
    12. } // bbs.it-home.org
    13. $nfn = $dir.date("Ymdhis").$i.".".$filetype; //构建文件的新名字
    14. $nf = @fopen($nfn,"w"); //创建文件
    15. fwrite($nf,$ff); //写入文件
    16. fclose($nf); //关闭文件
    17. $i++; //多文件++
    18. echo "";
    19. $content = str_replace($v,$nfn, $content);//替换content中的参数
    20. }else{//获取不到图片则替换为默认图片
    21. $content = str_replace($v,"/upload/201204/20120417213810742.gif", $content);//替换content中的参数
    22. }
    23. }
    24. }
    25. }
    复制代码

    例3,PHP通过正则表达式下载图片到本地。

    1. /*

    2. shortage: 如果网页中的图片路径不是绝对路径,就无法抓取
    3. */
    4. set_time_limit(0);//抓取不受时间限制

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

    6. get_pic($URL);

    7. function get_pic($pic_url) {

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

    15. echo "
      finished!!!";

    16. return 0;
    17. }

    18. /*得到图片类型,并将其保存到与该文件同一目录*/

    19. function get_name($pic_arr)
    20. {
    21. //图片类型
    22. $pattern_type = '/(/.(jpg|bmp|jpeg|gif|png))/';

    23. foreach($pic_arr as $pic_item){//循环取出每幅图的地址

    24. $num = preg_match_all($pattern_type, $pic_item, $match_type);
    25. $pic_name = get_unique().$match_type[1][0];//改时微秒时间戳命名
    26. //以流的形式保存图片
    27. $write_fd = @fopen($pic_name,"wb");
    28. @fwrite($write_fd, CurlGet($pic_item));
    29. @fclose($write_fd);
    30. echo "[OK]..!";
    31. }
    32. return 0;
    33. }

    34. //通过微秒时间获得唯一ID

    35. function get_unique(){
    36. list($msec, $sec) = explode(" ",microtime());
    37. return $sec.intval($msec*1000000);
    38. }

    39. //抓取网页内容

    40. function CurlGet($url){
    41. $url=str_replace('&'//m.sbmmt.com/m/article/,'&',$url);
    42. $curl = curl_init();
    43. curl_setopt($curl, CURLOPT_URL, $url);
    44. curl_setopt($curl, CURLOPT_HEADER, false);

    45. //curl_setopt($curl, CURLOPT_REFERER,$url);

    46. curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; SeaPort/1.2; Windows NT 5.1; SV1; InfoPath.2)");
    47. curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookie.txt');
    48. curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookie.txt');
    49. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    50. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 0);
    51. $values = curl_exec($curl);
    52. curl_close($curl);
    53. return $values;
    54. }
    55. ?>

    复制代码
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php正则表达式提取网页超链接url与网页中图片
    上一篇:php怎么判断gif图片是否为动画? 下一篇:php sql注入攻击与防范注意事项
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• PHP如何使用xlswriter进行大数据的导入导出?(详解)• PHP5中Cookie与 Session使用详解_PHP教程• PHP重定向的3种方式_PHP教程• PHP 第三节 变量介绍_PHP教程• PHP中PDO基础教程 入门级_PHP教程
    1/1

    PHP中文网