PHP擷取指定URL頁面中的所有連結

來源:互聯網
上載者:User
form:http://www.uphtm.com/php/253.html

這個東西其實我們開發人員來講常用了,以前做一個抓取其它網站友情串連時用過,今天看到一朋友整理了一個PHP擷取指定URL頁面中的所有連結函數,整理過來我們一起來看看吧。

以下代碼可以擷取到指定URL頁面中的所有連結,即所有a標籤的href屬性:

  1. // 擷取連結的HTML代碼
  2. $html = file_get_contents('http://www.111cn.net');
  3. $dom = new DOMDocument();
  4. @$dom->loadHTML($html);
  5. $xpath = new DOMXPath($dom);
  6. $hrefs = $xpath->evaluate('/html/body//a');
  7. for ($i = 0; $i < $hrefs->length; $i++) {
  8. $href = $hrefs->item($i);
  9. $url = $href->getAttribute('href');
  10. echo $url.'
    ';
  11. }

這段代碼會擷取到所有a標籤的href屬性,但是href屬性值不一定是連結,我們可以在做個過濾,只保留http開頭的連結地址:

  1. // 擷取連結的HTML代碼
  2. $html = file_get_contents('http://www.111cn.net');
  3. $dom = new DOMDocument();
  4. @$dom->loadHTML($html);
  5. $xpath = new DOMXPath($dom);
  6. $hrefs = $xpath->evaluate('/html/body//a');
  7. for ($i = 0; $i < $hrefs->length; $i++) {
  8. $href = $hrefs->item($i);
  9. $url = $href->getAttribute('href');
  10. // 保留以http開頭的連結
  11. if(substr($url, 0, 4) == 'http')
  12. echo $url.'
    ';
  13. }

fopen()函數讀取指定網頁中的所有連結並統計出數量,在一些需要採集網頁頁容的地方,適合使用本代碼,本例以讀取百度首頁為例,找出百度首頁中所有的連結地址,代碼經過測試,完全可用:

  1. if(empty($url))$url = "http://www.baidu.com/";//需要採集連結的URL地址
  2. $site=substr($url,0,strpos($url,"/",8));
  3. $base=substr($url,0,strrpos($url,"/")+1);//檔案所在目錄
  4. $fp = fopen($url, "r" );//開啟url地址頁面
  5. while(!feof($fp))$contents.=fread($fp,1024);
  6. $pattern="|href=['\"]?([^ '\"]+)['\" ]|U";
  7. preg_match_all($pattern,$contents, $regArr, PREG_SET_ORDER);//使用正則匹配所有href=
  8. for($i=0;$i
  9. if(!eregi("://",$regArr[$i][1]))//判斷是否是相對路徑,即是否還有://
  10. if(substr($regArr[$i][1],0,1)=="/")//是否是網站的根目錄
  11. echo "link".($i+1).":".$site.$regArr[$i][1]."
    ";//根目錄
  12. else
  13. echo "link".($i+1).":".$base.$regArr[$i][1]."
    ";//目前的目錄
  14. else
  15. echo "link".($i+1).":".$regArr[$i][1]."
    ";//相對路徑
  16. }
  17. fclose($fp);
  18. ?>

form:http://www.uphtm.com/php/253.html

以上就介紹了PHP擷取指定URL頁面中的所有連結,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.