簡介:這是PHP實現最簡單爬蟲原型的詳細頁面,介紹了和php,PHP, 爬蟲 PHP實現最簡單爬蟲原型有關的知識、技巧、經驗,和一些php源碼等。
class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=358571' scrolling='no'>
最簡單的爬蟲模型應該是這樣的:給一個初始url,爬蟲把內容扒下拉,找頁面裡的url,在以這些url為起點,開始爬。
下面是一個最簡單的php實現的爬蟲模型。
<?php<br />/**<br /> * 爬蟲程式 -- 原型<br /> *<br /> * BookMoth 2009-02-21<br /> */<br />/**<br /> * 從給定的url擷取html內容<br /> *<br /> * @param string $url<br /> * @return string<br /> */<br />function _getUrlContent($url){<br />$handle = fopen($url, "r");<br />if($handle){<br />$content = stream_get_contents($handle,1024*1024);<br />return $content;<br />}else{<br />return false;<br />}<br />}<br />/**<br /> * 從html內容中篩選連結<br /> *<br /> * @param string $web_content<br /> * @return array<br /> */<br />function _filterUrl($web_content){<br />$reg_tag_a = '/<[a|A].*?href=[/'/"]{0,1}([^>/'/"/ ]*).*?>/';<br />$result = preg_match_all($reg_tag_a,$web_content,$match_result);<br />if($result){<br />return $match_result[1];<br />}<br />}<br />/**<br /> * 修正相對路徑<br /> *<br /> * @param string $base_url<br /> * @param array $url_list<br /> * @return array<br /> */<br />function _reviseUrl($base_url,$url_list){<br />$url_info = parse_url($base_url);<br />$base_url = $url_info["scheme"].'://';<br />if($url_info["user"]&&$url_info["pass"]){<br />$base_url .= $url_info["user"].":".$url_info["pass"]."@";<br />}<br />$base_url .= $url_info["host"];<br />if($url_info["port"]){<br />$base_url .= ":".$url_info["port"];<br />}<br />$base_url .= $url_info["path"];<br />print_r($base_url);<br />if(is_array($url_list)){<br />foreach ($url_list as $url_item) {<br />if(preg_match('/^http/',$url_item)){<br />//已經是完整的url<br />$result[] = $url_item;<br />}else {<br />//不完整的url<br />$real_url = $base_url.'/'.$url_item;<br />$result[] = $real_url;<br />}<br />}<br />return $result;<br />}else {<br />return;<br />}<br />}<br />/**<br /> * 爬蟲<br /> *<br /> * @param string $url<br /> * @return array<br /> */<br />function crawler($url){<br />$content = _getUrlContent($url);<br />if($content){<br />$url_list = _reviseUrl($url,_filterUrl($content));<br />if($url_list){<br />return $url_list;<br />}else {<br />return ;<br />}<br />}else{<br />return ;<br />}<br />}<br />/**<br /> * 測試用主程式<br /> *<br /> */<br />function main(){<br />$current_url = "http://hao123.com/";//初始url<br />$fp_puts = fopen("url.txt","ab");//記錄url列表<br />$fp_gets = fopen("url.txt","r");//儲存url列表<br />do{<br />$result_url_arr = crawler($current_url);<br />if($result_url_arr){<br />foreach ($result_url_arr as $url) {<br />fputs($fp_puts,$url."/r/n");<br />}<br />}<br />}while ($current_url = fgets($fp_gets,1024));//不斷獲得url</p><p>}<br />main();<br />?>
當然這隻爬蟲還需要進行下面的進化才可以:
1、拼接更準確的url連結。現在的連結有可能是格式錯誤的。
2、能夠去掉重複的url連結。現在的爬蟲會做非常多非常多的重複工作。
3、避免爬蟲怕成環路,一個永遠右轉的車,只能是300內環,它只會跑在三環路上,去不了別的地方。
4、多線程或者多進程。因為php沒有線程的概念,所以可能需要shell這樣的東西來類比了。
5、……略去2的N次方個漢字。
反正是意思一下就好了~
愛J2EE關注Java邁克爾傑克遜視頻站JSON線上工具
http://biancheng.dnbcw.info/php/358571.html pageNo:1