抓取的是继教网的一些教师日志和文章,经分析终端页需要登陆有才能查看,所以需要用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;
}