PHP實現最簡單爬蟲原型

來源:互聯網
上載者:User

簡介:這是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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.