某网站数据抓取

           

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yijiliangfang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值