如何实现模拟登录?

通过模拟登录, 可以解决登录后才能爬取某些网站数据的问题.PHPSpider框架提供两种登录方式:
1、通过发送HTTP请求来实现模拟登录2、从Chrome浏览器拷贝Cookie字符串

通过发送HTTP请求来实现模拟登录

举个栗子:

  1. // 登录请求url
  2. $login_url = "http://www.waduanzi.com/login?url=http%3A%2F%2Fwww.waduanzi.com%2F";
  3. // 提交的参数
  4. $params = array(
  5. "LoginForm[returnUrl]" => "http%3A%2F%2Fwww.waduanzi.com%2F",
  6. "LoginForm[username]" => "13712899314",
  7. "LoginForm[password]" => "854230",
  8. "yt0" => "登录",
  9. );
  10. // 发送登录请求
  11. requests::post($login_url, $params);
  12. // 登录成功后本框架会把Cookie保存到www.waduanzi.com域名下,我们可以看看是否是已经收集到Cookie了
  13. $cookies = requests::get_cookies("www.waduanzi.com");
  14. print_r($cookies); // 可以看到已经输出Cookie数组结构
  15. // requests对象自动收集Cookie,访问这个域名下的URL会自动带上
  16. // 接下来我们来访问一个需要登录后才能看到的页面
  17. $url = "http://www.waduanzi.com/member";
  18. $html = requests::get($url);
  19. echo $html; // 可以看到登录后的页面,非常棒?

如何获得提交参数?

登录需要登录验证信息,下面我们来看看如何获得一个网站所需要的登录信息还是以挖段子(www.waduanzi.com)为例,看看如何获得下面的信息

1、打开挖段子网站点击登录按钮进入登陆页:http://www.waduanzi.com/login?url=http%3A%2F%2Fwww.waduanzi.com%2F

2、鼠标点击右键 -> 检查 从而打开Chrome浏览器的开发者工具

如何实现模拟登录?  - 图1

选择Network选项卡,勾选Preserve log选项

如何实现模拟登录?  - 图2

3、填写登陆信息点击登录按钮,得到登录验证URL

如何实现模拟登录?  - 图3

4、上面的登录提交字段填入框架代码

  1. $params => array(
  2. "LoginForm[returnUrl]" => "http%3A%2F%2Fwww.waduanzi.com%2F",
  3. "LoginForm[username]" => "用户名",
  4. "LoginForm[password]" => "密码",
  5. "yt0" => "登录",
  6. )

上面的方式适用于简单的登录验证方式,如果遇到验证码,token表单字段,还有各种用js加密算法生成的登录字段,模拟登录就会变得异常复杂,为了节省时间,我们一般人工登录后,拷贝Cookie字符串来登录

1、登录成功后,在跳转的页面找Cookie字符串

如何实现模拟登录?  - 图4

2、上面的登录提交字段填入框架代码

  1. // 模拟登录
  2. $cookies = "复制上面Cookie:后面那一串字符串...";
  3. requests::set_cookies($cookies, 'www.waduanzi.com');
  4. // 接下来我们来访问一个需要登录后才能看到的页面
  5. $url = "http://www.waduanzi.com/member";
  6. $html = requests::get($url);
  7. echo $html; // 可以看到登录后的页面,非常棒?