Maison >développement back-end >tutoriel php >php正则表达式提取网页超链接url与网页中图片

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

WBOY
WBOYoriginal
2016-07-25 08:52:571495parcourir
  1. function match_links($document) {
  2. preg_match_all("']+))[^>]*>?(.*?)'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")."/";//指定新的存储路径
  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 "php正则表达式提取网页超链接url与网页中图片 ";
  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 = '//';
  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('&','&',$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. ?>
复制代码


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn