首頁 >後端開發 >php教程 >php正規表示式擷取網頁超連結url與網頁中圖片

php正規表示式擷取網頁超連結url與網頁中圖片

WBOY
WBOY原創
2016-07-25 08:52:571491瀏覽
  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_fd, CurlGet($pic_item));
  30. @fclose($ write_fd);
  31. echo "[OK]..!";
  32. }
  33. return 0;
  34. }
  35. //透過微秒時間取得唯一ID

  36. function get_unique(){
  37. list($msec, $sec) = explode(" ",microtime());
  38. return $sec.intval($msec*1000000);
  39. } p>
  40. //抓取網頁內容

  41. function CurlGet($url){
  42. $url=str_replace('&','&',$url);
  43. $curl = curl_init();
  44. curl_setopt($curl, CURLOPT_URL, $url);
  45. curl_setopt($curl, CURLOPT_HEADER, false);
  46. //curl, CURc ( $url);

  47. curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; SeaPort/1.2; Windows NT 5.1; SV1; InfoPath.2)");
  48. Curl_setopt( , 'cookie.txt');
  49. curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookie.txt');
  50. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  51. LLWURtop%)$7Sf. ;
  52. $values = curl_exec($curl);
  53. curl_close($curl);
  54. return $values;
  55. }
  56. ?>
複製程式碼


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn