form:http://www.uphtm.com/php/253.html
這個東西其實我們開發人員來講常用了,以前做一個抓取其它網站友情連接時用過,今天看到一朋友整理了一個PHP獲取指定URL頁面中的所有鏈接函數,整理過來我們一起來看看吧。
以下程式碼可以取得到指定URL頁面中的所有鏈接,即所有a標籤的href屬性:
- // 取得連結的HTML程式碼
- $html = file_get_contents('http://www.111cn.net');
- $dom = new DOMDocument();
- @$dom->loadHTML($html);
- $xpath = new DOMXPath($dom);
- $hrefs = $xpath->evaluate('/html/body//a');
- for ($i = 0; $i length; $i++) {
- $href = $hrefs->item($i);
- $url = $href->getAttribute('href');
- echo $url.'
';
- }
這段程式碼會取得到所有a標籤的href屬性,但是href屬性值不一定是鏈接,我們可以在做個過濾,只保留http開頭的連結位址:
- // 取得連結的HTML程式碼
- $html = file_get_contents('http://www.111cn.net');
- $dom = new DOMDocument();
- @$dom->loadHTML($html);
- $xpath = new DOMXPath($dom);
- $hrefs = $xpath->evaluate('/html/body//a');
- for ($i = 0; $i length; $i++) {
- $href = $hrefs->item($i);
- $url = $href->getAttribute('href');
-
- // 保留以http開頭的連結
- if(substr($url, 0, 4) == 'http')
- echo $url.'
';
- }
fopen()函數讀取指定網頁中的所有連結並統計出數量,在一些需要擷取網頁頁容的地方,適合使用本程式碼,本例以讀取百度首頁為例,找出百度首頁中所有的連結地址,程式碼經過測試,完全可用:
-
- if(empty($url))$url = "http://www.baidu.com/";//需要採集連結的URL位址
- $site=substr($url,0,strpos($url,"/",8));
- $base=substr($url,0,strrpos($url,"/")+1);//檔案所在目錄
- $fp = fopen($url, "r" );//開啟url位址頁面
- while(!feof($fp))$contents.=fread($fp,1024);
- $pattern="|href=['"]?([^ '"]+)['" ]|U";
- preg_match_all($pattern,$contents, $regArr, PREG_SET_ORDER);//使用正規符合所有href=
- for($i=0;$i
- if(!eregi("://",$regArr[$i][1]))//判斷是否為相對路徑,即是否還有://
- if(substr($regArr[$i][1],0,1)=="/")//是否為站點的根目錄
- echo "link".($i+1).":".$site.$regArr[$i][1]."
";//根目錄
- else
- echo "link".($i+1).":".$base.$regArr[$i][1]."
";//目前目錄
- else
- echo "link".($i+1).":".$regArr[$i][1]."
";//相對路徑
- }
- fclose($fp);
- ?>
form:http://www.uphtm.com/php/253.html
以上就介紹了PHP獲取指定URL頁面中的所有鏈接,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。