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 怎么获取你登陆人人网时传入的数据...
- 用 Chrome 或 FireFox 浏览器打开fireBug
- 把
preserver log
和disable cache
勾上(我用的是chrome浏览器) - 输入你的用户名和密码
然后点“登陆” 然后它有个登陆地址... 找到如图的地址: 这下面就是你传的数据了...
方法上面都写了,还不清楚的下而留言,我一定会慢慢回复解答的...谢谢大家的观赏...
The end!
很赞哦! (1)
上一篇:一段时间过后
下一篇:一个刷脸测年龄的小工具
文章评论
点击排行
本栏推荐
标签
站点信息
- 微信公众号