([\w\W]*?)<\/td>/',$table,$out); $td = $out[1]; $length = count($td); //獲得課程列表 for ($i=0; $i < $length; $i++) { $td[$i] = str_replace(" ", "", $td[$i]); $reg = "/{(.*)}/"; if (!preg_match_all($reg, $td[$i], $matches)) { unset($td[$i]); }}$td = array_values($td); //將課程列表數組重新索引$tdLength = count($td);for ($i=0; $i < $tdLength; $i++) { $td[$i] = iconv('GB2312','UTF-8',$td[$i]);}//將課錶轉換成數組形式function converttoTable($table){$list = array('sun' => array('1,2' => '','3,4' => '','5,6' => '','7,8' => '','9,10' => ''),'mon' => array('1,2' => '','3,4' => '','5,6' => '','7,8' => '','9,10' => ''),'tues' => array('1,2' => '','3,4' => '','5,6' => '','7,8' => '','9,10' => ''),'wed' => array('1,2' => '','3,4' => '','5,6' => '','7,8' => '','9,10' => ''),'thur' => array('1,2' => '','3,4' => '','5,6' => '','7,8' => '','9,10' => ''),'fri' => array('1,2' => '','3,4' => '','5,6' => '','7,8' => '','9,10' => ''),'sat' => array('1,2' => '','3,4' => '','5,6' => '','7,8' => '','9,10' => ''));$week = array("sun"=>"周日","mon"=>"周一","tues"=>"周二","wed"=>"周三","thur"=>"周四","fri"=>"周五","sat"=>"周六");$order = array('1,2','3,4','5,6','7,8','9,10');foreach ($table as $key => $value) {$class = $value;foreach ($week as $key => $weekDay) {$pos = strpos($class,$weekDay);// echo $pos;if ($pos) {$weekArrayDay = $key; //擷取list數組中的第一維key foreach ($order as $key => $orderClass) {$pos = strpos($class,$orderClass);if ($pos) {$weekArrayOrder = $orderClass; //擷取該課程是第幾節break;}}break;}}$list[$weekArrayDay][$weekArrayOrder] = $class;}return $list;}//調用函數return converttoTable($td); }else{ return 0; }} 6,再試試查詢空教室的功能 //空教室查詢結果public function roomresult(){$xh = ""; //設定學號$pwd = ""; //學號對應的密碼$cookie = $this->login($xh,$pwd); $url = "http://jw.hzau.edu.cn/xs_main.aspx?xh={$xh}"; $result = curl_request($url,'',$cookie); //儲存的cookies $url="http://jw.hzau.edu.cn/xxjsjy.aspx?xh={$xh}"; $post['Button2'] = iconv('utf-8', 'gb2312', '空教室查詢'); $post['__EVENTARGUMENT']=''; $post['__EVENTTARGET']=''; $post['__VIEWSTATE'] = $this->getViewJs($cookie,$xh); $post['ddlDsz'] = iconv('utf-8', 'gb2312', '單'); $post['ddlSyXn'] = '2014-2015'; //學年 $post['ddlSyxq'] = '1'; $post['jslb'] = ''; $post['xiaoq'] = ''; $post['kssj']=$_GET['start']; //提交的開始查詢時間 $post['sjd']=$_GET['class'];//提交的課程節次 $post['xn']='2014-2015';//所在學年 $post['xq']='2';//所在學期 $post['xqj']='6';//當天星期幾 $post['dpDataGrid1:txtPageSize']=90;//每頁顯示條數 $result = curl_request($url,$post,$cookie,0);preg_match_all('/]+>[^>]+span>/',$result,$out); $tip = iconv('gb2312', 'utf-8', $out[0][3]);//擷取頁面前部的提示內容 preg_match_all('/([\w\W]*?)<\/table>/',$result,$out); $table = iconv('gb2312', 'utf-8', $out[0][0]); //擷取查詢列表$this->load->view("classroom",array('tip'=>$tip,'table'=>$table)); } 總結起來就是這些了,每個學校的教務系統都不盡相同,這時我們可以藉助Firefox瀏覽器的 firebug 抓包,看看到底提交了哪些東西。如果不成功,要看看自己該提交的東西post 上去了沒有,如果再不成功,額……可以聯絡我 imzhongshan@126.com 就這些了,趕快去試試吧! http://www.bkjia.com/PHPjc/1001450.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1001450.htmlTechArticle以正方教務系統為例,用php類比登陸抓取課表、空教室,抓取課表 課程格子和超級課程表這兩個應用,想必大學生都很熟悉,使用自己的學... |