国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > PHP > 正文

一個(gè)PHP實(shí)現(xiàn)的輕量級(jí)簡(jiǎn)單爬蟲(chóng)

2020-03-22 18:27:19
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
最近需要收集資料,在瀏覽器上用另存為的方式實(shí)在是很麻煩,而且不利于存儲(chǔ)和檢索。所以自己寫(xiě)了一個(gè)小爬蟲(chóng),在網(wǎng)上爬東西,迄今為止,已經(jīng)爬了近百 萬(wàn)張網(wǎng)頁(yè)?,F(xiàn)在正在想辦法著手處理這些數(shù)據(jù)。爬蟲(chóng)的結(jié)構(gòu):
爬蟲(chóng)的原理其實(shí)很簡(jiǎn)單,就是分析下載的頁(yè)面,找出其中的連接,然后再下載這些鏈接,再分析再下載,周而復(fù)始。在數(shù)據(jù)存儲(chǔ)方面,數(shù)據(jù)庫(kù)是首選,便于檢索,而 開(kāi)發(fā)語(yǔ)言,只要支持html' target='_blank'>正則表達(dá)式就可以了,數(shù)據(jù)庫(kù)我選擇了mysql,所以,開(kāi)發(fā)腳本我選擇了php。它支持perl兼容正則表達(dá)式,連接mysql很方 便,支持http下載,而且windows系統(tǒng)和linux系統(tǒng)都可以部署。正則表達(dá)式:
正則表達(dá)式是處理文字的基本工具,要取出html中的鏈接和圖片,使用的正則表達(dá)式如下。http://xiazai.phpstudy.net/201506/other/net_spider.rar
使用的時(shí)候,先在mysql中創(chuàng)建net_spider數(shù)據(jù)庫(kù),然后用db.sql創(chuàng)建相關(guān)表。再在config.php中設(shè)置mysql 的用戶(hù)名口令。
最后
http://news.sina.com.cn
現(xiàn)在感覺(jué)下來(lái),其實(shí)做個(gè)爬蟲(chóng)沒(méi)那么復(fù)雜,難的是數(shù)據(jù)的存儲(chǔ)和檢索。我現(xiàn)在的數(shù)據(jù)庫(kù),最大一個(gè)數(shù)據(jù)表已經(jīng)15G,正在想辦處理這些數(shù)據(jù),mysql進(jìn) 行查詢(xún)已經(jīng)感覺(jué)有點(diǎn)力不從心了。這點(diǎn)上還真佩服google#加載頁(yè)面function curl_get($url){ $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch,CURLOPT_HEADER,1); $result=curl_exec($ch); $code=curl_getinfo($ch,CURLINFO_HTTP_CODE); if($code!='404' && $result){ return $result; curl_close($ch);#獲取頁(yè)面url鏈接function get_page_urls($spider_page_result,$base_url){ $get_url_result=preg_match_all("/ [a|A].* href=[/'/"]{0,1}([^ /'/"/]*).* /",$spider_page_result,$out); if($get_url_result){ return $out[1]; }else{ return;#相對(duì)路徑轉(zhuǎn)絕對(duì)路徑function xdtojd($base_url,$url_list){ if(is_array($url_list)){ foreach($url_list as $url_item){ if(preg_match("/^(http:////|http:////|javascript:)/",$url_item)){ $result_url_list[]=$url_item; }else { if(preg_match("/^///",$url_item)){ $real_url = $base_url.$url_item; }else{ $real_url = $base_url."/".$url_item; #$real_url = 'http://www.sumpay.cn/'.$url_item; $result_url_list[] = $real_url; return $result_url_list; }else{ return;#刪除其他站點(diǎn)urlfunction other_site_url_del($jd_url_list,$url_base){ if(is_array($jd_url_list)){ foreach($jd_url_list as $all_url){ echo $all_url; if(strpos($all_url,$url_base)===0){ $all_url_list[]=$all_url; return $all_url_list; }else{ return;#刪除相同URLfunction url_same_del($array_url){ if(is_array($array_url)){ $insert_url=array(); $pizza=file_get_contents("/tmp/url.txt"); if($pizza){ $pizza=explode("/r/n",$pizza); foreach($array_url as $array_value_url){ if(!in_array($array_value_url,$pizza)){ $insert_url[]=$array_value_url; if($insert_url){ foreach($insert_url as $key = $insert_url_value){ #這里只做了參數(shù)相同去重處理 $update_insert_url=preg_replace('/=[^&]*/','=leesec',$insert_url_value); foreach($pizza as $pizza_value){ $update_pizza_value=preg_replace('/=[^&]*/','=leesec',$pizza_value); if($update_insert_url==$update_pizza_value){ unset($insert_url[$key]); continue; }else{ $insert_url=array(); $insert_new_url=array(); $insert_url=$array_url; foreach($insert_url as $insert_url_value){ $update_insert_url=preg_replace('/=[^&]*/','=leesec',$insert_url_value); $insert_new_url[]=$update_insert_url; $insert_new_url=array_unique($insert_new_url); foreach($insert_new_url as $key = $insert_new_url_val){ $insert_url_bf[]=$insert_url[$key]; $insert_url=$insert_url_bf; return $insert_url; }else{ return; $current_url=$argv[1];$fp_puts = fopen("/tmp/url.txt","ab");//記錄url列表 $fp_gets = fopen("/tmp/url.txt","r");//保存url列表 $url_base_url=parse_url($current_url);if($url_base_url['scheme']==""){ $url_base="http://".$url_base_url['host'];}else{ $url_base=$url_base_url['scheme']."://".$url_base_url['host']; $spider_page_result=curl_get($current_url); #var_dump($spider_page_result); $url_list=get_page_urls($spider_page_result,$url_base); #var_dump($url_list); if(!$url_list){ continue; $jd_url_list=xdtojd($url_base,$url_list); #var_dump($jd_url_list); $result_url_arr=other_site_url_del($jd_url_list,$url_base); var_dump($result_url_arr); $result_url_arr=url_same_del($result_url_arr); #var_dump($result_url_arr); if(is_array($result_url_arr)){ $result_url_arr=array_unique($result_url_arr); foreach($result_url_arr as $new_url) { fputs($fp_puts,$new_url."/r/n"); }while ($current_url = fgets($fp_gets,1024));//不斷獲得url preg_match_all("/ a[^ ]+href=[/"']([^/"']+)[/"'][^ ]+ /",$spider_page_result,$out);# echo a href#var_dump($out[1]);PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 雷州市| 巴东县| 鹰潭市| 江都市| 措美县| 海盐县| 翁牛特旗| 巍山| 象山县| 仲巴县| 宁强县| 镇安县| 高尔夫| 禹州市| 浮山县| 巴中市| 凤凰县| 刚察县| 屏东市| 长宁区| 始兴县| 白玉县| 六枝特区| 永宁县| 若羌县| 巴彦淖尔市| 叶城县| 贺兰县| 马山县| 壤塘县| 镶黄旗| 麟游县| 平舆县| 柯坪县| 盐城市| 广州市| 龙川县| 宽甸| 德江县| 玉林市| 慈溪市|