最简单的爬虫模型应该是这样的:给一个初始url,爬虫把内容扒下拉,找页面里的url,在以这些url为起点,开始爬。
下面是一个最简单的php实现的爬虫模型。
/';$result = preg_match_all($reg_tag_a,$web_content,$match_result);if($result){return $match_result[1];}}/*** 修正相对路径** @param string $base_url* @param array $url_list* @return array*/function _reviseurl($base_url,$url_list){$url_info = parse_url($base_url);$base_url = $url_info[scheme].'://';if($url_info[user]&&$url_info[pass]){$base_url .= $url_info[user].:.$url_info[pass].@;}$base_url .= $url_info[host];if($url_info[port]){$base_url .= :.$url_info[port];}$base_url .= $url_info[path];print_r($base_url);if(is_array($url_list)){foreach ($url_list as $url_item) {if(preg_match('/^http/',$url_item)){//已经是完整的url$result[] = $url_item;}else {//不完整的url$real_url = $base_url.'/'.$url_item;$result[] = $real_url;}}return $result;}else {return;}}/*** 爬虫** @param string $url* @return array*/function crawler($url){$content = _geturlcontent($url);if($content){$url_list = _reviseurl($url,_filterurl($content));if($url_list){return $url_list;}else {return ;}}else{return ;}}/*** 测试用主程序**/function main(){$current_url = http://hao123.com/;//初始url$fp_puts = fopen(url.txt,ab);//记录url列表$fp_gets = fopen(url.txt,r);//保存url列表do{$result_url_arr = crawler($current_url);if($result_url_arr){foreach ($result_url_arr as $url) {fputs($fp_puts,$url.\r\n);}}}while ($current_url = fgets($fp_gets,1024));//不断获得url}main();?>
当然这只爬虫还需要进行下面的进化才可以:
1、拼接更准确的url链接。现在的链接有可能是格式错误的。
2、能够去掉重复的url链接。现在的爬虫会做非常多非常多的重复工作。
3、避免爬虫怕成环路,一个永远右转的车,只能是300内环,它只会跑在三环路上,去不了别的地方。
4、多线程或者多进程。因为php没有线程的概念,所以可能需要shell这样的东西来模拟了。
5、……略去2的n次方个汉字。
反正是意思一下就好了~
from http://blog.csdn.net/bookmoth/archive/2009/02/21/3916538.aspx