我的反爬解决方案(2)—— 模拟登陆

项目地址

常见站点模拟登陆(长期维护):https://github.com/IMWoolei/fuck-login

前言

爬虫的任务不仅仅是采集数据,自动刷访问量自动发布内容等都属于爬虫所涉及的范围。

而完成自动刷访问量、发布这些功能往往都需要在登陆状态下进行,另外HTTP是无连接\无状态的,所以实现登陆的目的是在本地生成Cookies,以记录本次会话状态。

另外携带Cookies的请求,可以在爬虫中解决一些反爬机制、采集数据量有限的问题,如在知乎信息采集中缺少Cookies会无法获取目标信息,采集搜狗微信时未登陆情况下只能请求前10页…

常见登陆方式

  • 账号密码明文提交,不做任何加密,如GitHub豆瓣CSDN(现在已更新了)等站点;

  • 账号密码进行加密或JS生成附带信息,如SHA1MD5HMACAESBase64等多种加密方式,如搜狐新闻,拉勾网;

  • 额外需要提交验证码信息,多数站点都会选择这种方式,bilibili的极验、搜狗微信的数字字母、知乎的中文汉字等;

  • 预登陆操作,即登陆之前首先向服务器获取登陆信息,用于构造本次登录,如新浪微博;

  • 等等…

常见站点的登陆合集

项目地址:https://github.com/IMWoolei/fuck-login

接下来会不断新增站点和维护原有的登陆程序。

解决登陆问题时的思路

为了保证执行效率,所有的登陆方式都不使用Selenium/Appnium来实现,直接创建session进行记录本次会话。

主要的思路如下:

  • 账号和密码是否进行了加密

    • 无加密,直接提交;

    • 有加密,通常是js执行生成的加密字符串,找到加密代码块;

    • 是否附带了其他的必要的登陆信息,如表单中的name+value

  • 初始的会话Cookies信息是否存在登陆的必要信息

    • 请求目标站点,获取服务端返回的Header信息中的set-cookie
    • Cookiesjs生成,构建js生成Cookies的方法;
  • 是否存在验证码

    • 绕过验证码,避免出现验证码是最好的方案,某些站点在不同的页面上可能不会出现验证码。如搜狐新闻站点在PC-Web进行登陆时会出现验证码,而使用移动浏览器Web页面时则不会出现验证码;
    • 修改验证码出现方式,某些站点在不同的页面上出现的方式不同。如在今日头条中PC-Web中登陆时会出现滑块验证码,而在移动浏览器Web页面时是字母+数字的文字验证码,如果有可用的打码平台或识别模型,文字验证码更为方便接入;
    • 无法绕过的验证码,图形就接入打码,滑块就浏览器模拟滑动轨迹,其余的就视情况而定了;

你可能感兴趣的:(爬虫,反爬,模拟登陆,Python,爬虫,反爬)