某網站數據抓取

           

           抓取的是繼教網的一些教師日誌和文章,經分析終端頁需要登陸有才能查看,所以需要用cur模擬用戶登陸,登陸成功後逐條正則抓取。這段代碼是在ThinkPHP中運行的。可以自行修改。



   //測試抓取信息
   public function spider()
   {
	 
		//登錄地址,特別提醒,需要自己找一個教師的登陸帳戶
		$url = "http://cas.teacher.com.cn/restLoginCheck?username=abc&password=123456";
		//設置cookie保存路徑
		$cookie = dirname(__FILE__) . '/cookie_teacher.txt';
	
		//模擬登錄
		$this->login_get($url, $cookie);
	
		//刪除cookie文件
		//@unlink($cookie);
		//for($i=1;$i<114;$i++)
		//{}
		   $page=I('page',1);//$_GET['page'];//要抓取的當前頁面
		   $page_count=112;//一共多少頁
		   $list_url='http://nmgk2014.wx.px.teacher.com.cn/project/65/list/article?order=4&pageNo='.$page;
		            //http://nmgk2014.wx.px.teacher.com.cn/project/65/list/article?order=4&pageNo=1
		   //echo '<br>列表頁:'.$list_url.'<br>';
		   $list_content = file_get_contents($list_url) ;//$this->get_content($list_url, $cookie);
		   
		   //匹配內容頁面url
		   preg_match_all('/clickArticle\(([\d]+)\)"([\s]*?)target/i', $list_content, $arr);
		   
		   //print_r($arr);
		   foreach($arr[1] as $value)
		   {
			//獲取內容頁信息
			$url2 = "http://nmgk2014.wx.px.teacher.com.cn/article/view/".$value;
			         //http://nmgk2014.wx.px.teacher.com.cn/article/view/714799
			//echo '<br>內容頁:'.$url2.'<br>';	   
			//獲取登錄頁的信息
			$content = $this->get_content($url2, $cookie);	
			//echo $content;
			
			//匹配頁面信息
			preg_match_all('/<h1>(.*)<\/h1>/i', $content, $arr1);
			preg_match_all('/<\/h2>([.\n\r]+)<p>([\s\S]*?)<\/p>([.\n\r]+)<div class="box-f">/', $content, $arr2);
			preg_match_all('/<\/a>(.*)<\/h2>/i', $content, $arr3);
			//print_r($arr3);
			//exit;
			$data['title'] = $arr1[1][0];
			$data['content']= $arr2[2][0];
			$data['about']=$arr3[1][1];
			$data['add_time']=time();
			$data['type']='article';
			//print_r($data);
			 //sleep(1);
			$result=M('test')->add($data);//->fetchSql(true)
			echo '<br>抓取成功!yeah('.$result.')<br>';
	  		   
		   }
		   //exit;	
		   if($page<=$page_count)
		   {
		      echo '到下一頁';
			   //sleep(1);
			  $page++;
			  $next_page='http://web.internetedu.org.cn/home/test/spider/page/'.$page;
			  echo '<script>window.location= "'.$next_page.'";</script>';
			  //header("Location:"); 
		   }
		

   }

模擬登陸方法:


	//模擬登錄
	protected function login_get($url, $cookie) {
		$curl = curl_init();//初始化curl模塊
		curl_setopt($curl, CURLOPT_URL, $url);//登錄提交的地址
		curl_setopt($curl, CURLOPT_HEADER, 0);//是否顯示頭信息
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0);//是否自動顯示返回的信息
		curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //設置Cookie信息保存在指定的文件中
		//curl_setopt($curl, CURLOPT_POST, 1);//post方式提交
		//curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));//要提交的信息
		curl_exec($curl);//執行cURL
		curl_close($curl);//關閉cURL資源,並且釋放系統資源
	}

抓取方法:


	//登錄成功後獲取數據
	protected function get_content($url, $cookie) {
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); //讀取cookie
		$rs = curl_exec($ch); //執行cURL抓取頁面內容
		curl_close($ch);
		return $rs;
	}  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章