抓取的是繼教網的一些教師日誌和文章,經分析終端頁需要登陸有才能查看,所以需要用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;
}