Home / PostsPost

一个模拟登陆的小工具(抓取人人网状态的例子)

嘟噜聪2015/05/23 16:32:05 4237人已阅

简介 最近突然想抓取一个的所发的状态作了一个分析,然后就写了这么一个小工具,很简单,我就不写那么多了(其实就是最近变懒了)直接贴代码讲解吧...

一个模拟登陆的小工具(抓取人人网状态的例子)

最近突然想抓取一个的所发的状态作了一个分析,然后就写了这么一个小工具,很简单,我就不写那么多了(其实就是最近变懒了)直接贴代码讲解吧...

下面这个是非常简单的的小工具,只适合抓取特定的一点数据,当然先前得去分析一下网站的,我只是想获取特定的一个人的数据,如果想获取更多的数据的等方面自己可以再写个大的项目,挂到GitHub上然后咱们可以一起玩于。 还有推荐大家一个专门抓取数据网站 http://demo.pyspider.org/ 这是一个用Python写的抓取工具,GitHub上有开源代码,可以自己搭建服务器去玩。

<?php
class postRegister{
	protected $pdo;
	
	function __construct()
	{
		$this->pdo = new PDO("mysql:host={数据库地址};dbname={数据库名}","{用户名}","{密码}");
	}

	public function getPage()
	{
		set_time_limit(0);
		
		$login_url = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=2015441738547';

		$post_fields = [
			'email' 		=> '{你的人人邮箱}',
			'icode' 		=> '',
			'origURL' 		=> 'http://www.renren.com/home',
			'domain' 		=> 'renren.com',
			'key_id' 		=> 1,
			'captcha_type'  => 'web_login',
			'password' 		=> '{加密过后的密码,具体获得的方法我下面有写}',
			'rkey' 			=> '{随机字符串,下面有写}',
			'f' 			=> ''
		];

		/** cookie文件存放在网站根目录的temp文件夹下 */
		$cookie_file = tempnam('./temp','cookie');

		$ch = curl_init($login_url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5');
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_MAXREDIRS, 1);
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
		curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
		curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
		$result = curl_exec($ch);
		curl_close($ch);
		
		/** result应该会返回一个json字符串,code应该返回的是true,如果是false的话应该会有返回其他东西,具体的我忘记了你可看看 */

		/** 因为我知道它有多少页的数据... */
		for( $i = 0; $i < 12; $i++ )
		{
			/** 带上cookie文件,你需要抓取数据的地址 */
			$send_url='http://status.renren.com/GetSomeomeDoingList.do?userId={它的用户ID}&curpage='.$i.'&_jcb=jQuery1111009250002168118954_1432215454747&requestToken=-1418373141&_rtk=77365645&_=1432215454753';
			$ch = curl_init($send_url);
			curl_setopt($ch, CURLOPT_HEADER, 0);
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
			curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
			$contents = curl_exec($ch);
			curl_close($ch);
			$contents = base64_encode($contents);
			// echo "INSERT INTO renren(`data`) values('{$contents}')";die;
			/** 抓会来回先存吧,等以后有时间再慢慢处理所以就直接base_64处理了一下,先把数据保存起来 */
			if($this -> pdo -> exec("INSERT INTO gaofei(`data`) values('{$contents}')")){ 
				echo "插入成功!第{{$i}}页数据..."; 
				echo $this -> pdo -> lastinsertid()."\n"; 
			}
			/** 这里为什么要休息5秒呢?因为我怕人人把我IP封掉... */
			sleep(5);
		}
	}

	public function getDBdata()
	{
		$rs = $this -> pdo -> query("select * from renren"); 
		$rs->setFetchMode(PDO::FETCH_ASSOC);
		while($row = $rs -> fetchAll()){ 
			foreach ($row as $key => $value) {
				$data = base64_decode( $value['data']);
				$data = substr($data, 43, strlen($data) -44); //因为它是跨区请求的....
				print_r( json_decode($data));
			}
		} 
	}
}
$postRegister = new postRegister();
$postRegister->getPage();

上面留的Flag 怎么获取你登陆人人网时传入的数据...

  1. 用 Chrome 或 FireFox 浏览器打开fireBug
  2. preserver logdisable cache 勾上(我用的是chrome浏览器)
  3. 输入你的用户名和密码

然后点“登陆” 然后它有个登陆地址... 找到如图的地址:image description 这下面就是你传的数据了...image description

方法上面都写了,还不清楚的下而留言,我一定会慢慢回复解答的...谢谢大家的观赏...

The end!

很赞哦! (1)

文章评论

点击排行

本栏推荐

标签

站点信息

  • 微信公众号