snoopy 官网
snoopy是基于PHP的一个爬取网站数据类,使用方便 。以下是从底层理解写的一个模拟登陆案例:
$URL = 'http://www.****.cn/login.html'; // 登陆链接
$snoopy = new Snoopy;
$snoopy->fetchform( $URL ); // 获取登陆页面的表单,并且headers返回了模拟登陆所需要的cookie
$preg = '/name=\"(.*?)\".*?value=\"(.*?)\"/';
preg_match_all($preg,$snoopy->results , $res );
$formvars=[];
foreach ($res[1] as $key => $val ){
$formvars[$val] = $res[2][$key];
} // 把登陆所需要的参数提取出来(laravel可能有_token令牌)
$formvars['email'] = '[email protected]';
$formvars['password'] = '456'; // 加入账号密码
$snoopy->_redirectaddr = "http://www.****.cn"; //重定向地址,不清楚有什么用;但是底
层这个值必须为true才会调用setcookies()函数,把headers的set-cookie值写入到cookies里面
$snoopy->submit('http://www.****.cn/member/check',$formvars);//$formvars为提交的数组
$snoopy->fetchlinks("http://www.****.cn/center/profile"); // 需要获取数据的页面
dump($snoopy);exit;
jq22网站模拟登陆
// 登陆获取到cookie
$curl = curl_init();
$cookie_jar = tempnam( '/tmp','cookie'); // 保存cookie的目录,频繁执行脚本系统会累积很多
curl_setopt($curl, CURLOPT_URL,'http://www.jq22.com/emdl.aspx?em=用户&pw=密码');//登录的jq22
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar);// 把返回来的cookie信息保存在$cookie_jar文件中
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//设定返回 的数据是否自动显示
curl_setopt($curl, CURLOPT_HEADER, false);//设定是否显示头信 息
curl_setopt($curl, CURLOPT_NOBODY, false);//设定是否输出页面 内容
curl_exec($curl);//返回结果
curl_close($curl); //关闭
// 获取到cookie后,去爬取需要的页面
$curl2 = curl_init();
curl_setopt($curl2, CURLOPT_URL, 'http://www.jq22.com/myhome');//登陆后要从哪个页面获取信息
curl_setopt($curl2, CURLOPT_HEADER, false);
curl_setopt($curl2, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl2, CURLOPT_COOKIEFILE, $cookie_jar);
$content = curl_exec($curl2);
// 打印页面
dump($content);