欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-04-18 23:21:42
...
  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. ?>
复制代码