首先,需要下載一個simple_html_dom第三方擴充庫,具體下載方式和使用詳情可以查看:simple_html_dom的使用.
需要環境支援file_get_contents()函數和curl的支援,具體代碼如下:
<?php function timingimg($url,$dirname,$interval){ ignore_user_abort(); //瀏覽器關閉,程式繼續執行 set_time_limit(0);//忽略到預設30秒逾時 $interval = empty($interval)?3600:$interval; $dirname = empty($dirname)?'news/':$dirname; if(empty($url)){ die('請輸入目標網址!!!'); } do{ $arr = loadimg($url,$dirname); return $arr; //返回抓取內容所儲存的路徑 sleep($interval); die; }while(true);} /***擷取所有新聞連結*參數 $url 新聞列表地址*參數 $dirname 新聞圖片儲存路徑* 返回 二維數組 所有新聞記錄*/function loadimg($url,$dirname){ set_time_limit(0); include_once('simple_html_dom.php'); $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_HEADER,false); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $output = curl_exec($ch); curl_close($ch); $html = new simple_html_dom(); $html->load($output); $images = array(); $arr = array(); foreach($html->find('li a') as $element){ if( preg_match('#^http:\/\/tech\.sina\.com\.cn\/it\/[\d]{4}\-[\d]{1,2}\-[\d]{1,2}\/[\d]+\.shtml$#i',$element->href)){ array_push($images,$element->href); } } $images = array_unique($images); sort($images); for($i=0;$i<10;$i++){ //只抓取10條記錄 $arr[] = getcontent($images[$i],$dirname); } return $arr; } /***** 抓取單個新聞內容*參數 $url 新聞頁面地址*參數 $dirname 圖片儲存路徑*返回 一個新聞記錄 一維數組*/function getcontent($url,$dirname){ include_once('simple_html_dom.php'); $html = new simple_html_dom(); $data = file_get_contents($url); $html->load($data); $arr = array(); foreach($html->find('h1#artibodyTitle') as $element){ $arr['title']= @iconv('gbk','utf-8', $element->innertext);; } $str = ''; foreach($html->find('div#artibody p') as $element){ $str.= $element; } $arr['content'] = $str; foreach($html->find('div.img_wrapper img') as $element){ $arr['alt'] =$element->alt; $data = file_get_contents($element->src); $info = getimagesize($element->src);//get image information switch($info[2]){ case 1: $str = 'gif'; break; case 2: $str = 'jpg'; break; case 3: $str = 'png'; break; default: continue; break; } $filename = time().rand(1,999999).'.'.$str; if(!is_dir($dirname)){ mkdir($dirname,0777,true); } $fp = fopen($dirname.$filename,'w'); fwrite($fp,$data); fclose($fp); $arr['img'] = $dirname.$filename; } return $arr;}?>
如果大家有更好的建議,歡迎提出來