爬虫脚本是大家经常用到的,那就避开不了登录 这一关。

使用Python一般需要request库,补充 header 中的 post 要素,有些还会有 隐藏的 hidden 参数,可以通过浏览器 F12 或者元素审查来发现,对于初学者来说都是一个坑。

还有需要解决验证码的问题,一种方法是下载验证码图片识别验证码再次post,或者使用云打码平台。当然,有些验证码及其变态就不那么容易解决了,比如选字顺序、滑块、12306那种人为都会选错的。

本篇boy哥分享一个GitHub项目《awesome-python-login-model》,主要就是利用Python解决登录主流平台的,包含24个主流平台,目前在GitHub上已经表星11.8k了。

Github链接:https://github.com/Kr1s77/awesome-python-login-model

▍已完成的主流网站

上面是作者已经完成的一些主流网站了,其中有的是通过 selenium登录,有的是通过 抓包直接模拟登录,有的是利用 scrapy框架。

这个很容易理解,因为有的网站设计比较复杂,通过抓包很难实现模拟登录,这样用 selenium+webdriver 就会相对轻松一些。

虽然在登录的时候采用的是selenium,为了效率,我们可以在登录过后得到的cookie维护起来,然后调用requests或者scrapy等进行数据采集,这样数据采集的速度可以得到保证。

▍模拟登录GitHub

这里boy哥给大家展示一个模拟登录GitHub的代码。

"""
github第二种登录方式
info:
author:CriseLYJ
github:https://github.com/CriseLYJ/
update_time:2019-3-7
"""import re
import requests
from lxml import etreeclass Login(object):
class GithubLogin(object):def __init__(self, email, password):# 初始化信息self.headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36','Referer': 'https://github.com/','Host': 'github.com'}self.session = requests.Session()self.login_url = 'https://github.com/login'self.post_url = 'https://github.com/session'self.session = requests.Session()self.email = emailself.password = password
    # 模拟登录def login_GitHub(self):# 登录入口post_data = {'commit': 'Sign in','utf8': '✓','authenticity_token': self.get_token(),'login': self.email,'password': self.password}resp = self.session.post(self.post_url, data=post_data, headers=self.headers)print('StatusCode:', resp.status_code)if resp.status_code != 200:print('Login Fail')match = re.search(r'"user-login" content="(.*?)"', resp.text)user_name = match.group(1)print('UserName:', user_name)response = self.session.post(self.post_url, data=post_data, headers=self.headers)print(response.status_code)print(post_data)if response.status_code == 200:print("登录成功!")else:print("登录失败!")
    # 获取token信息# Get login tokendef get_token(self):response = self.session.get(self.login_url, headers=self.headers)html = etree.HTML(response.content.decode())token = html.xpath('//input[@name="authenticity_token"]/@value')[0]return tokenif response.status_code != 200:print('Get token fail')return Nonematch = re.search(r'name="authenticity_token" value="(.*?)"', response.text)if not match:print('Get Token Fail')return Nonereturn match.group(1)
if __name__ == '__main__':email = input('请输入您的账号: ')password = input('请输入您的密码: ')email = input('Account:')password = input('Password:')login = Login(email, password)login = GithubLogin(email, password)login.login_GitHub()

相信这对初学爬虫的朋友是一个很好的教程。

但提示一下,模拟登录的代码随时都有可能失效,因为前端的网页HTML、CSS、JS等结构可能会根据公司业务调整之类的发生变化。

所以,重点是掌握了各种技巧,学会这些完全可以自己调试完成登录,那时候你也可以成为 contributor 了!

Github链接:https://github.com/Kr1s77/awesome-python-login-model

公众号文末改版了,如果觉得有帮助,还请多多支持,欢迎 分享、点赞、在看 三连。

为了回馈广大读者朋友,我特地免费送给大家三份大礼1. Pandas 官方教程中文版。
2. 300G 硬核 Python 视频,涵盖你所有想看。
3. 一个月精通 Python 的秘籍。
下面是部分视频的截图资料获取方法
长按扫描下方二维码关注
在后台回复关键词:资料扫描关注,回复"资料"免费领取

大写牛逼,用 Python 登录主流 24 个网站相关推荐

  1. 牛逼!Python错误、异常和模块(长文系列第4篇)

    系列第四篇主要讲两方面,错误和异常以及模块.在编程时遇见错误信息在所难免,Python中会也有很多种错误信息,常见的两种就是语法错误和逻辑错误,逻辑错误的种类有很多,占据了异常中大部分位置,下面就开始 ...

  2. 牛逼!Python的判断、循环和各种表达式(长文系列第②篇)

    流程控制是python语法很重要的一个分支,主要包括我们经常用到的判断语句.循环语句以及各种表达式,这也是上一篇文章没有介绍表达式的原因,在这篇文章中会更加系统全面的讲解这三方面的基础知识. 判断语句 ...

  3. 牛逼!Python的类和对象(长文系列第⑤篇)

    系列最后一篇来说说Python中的类与对象,Python这门语言是无处不对象,如果你曾浅要了解过Python,你应该听过Python是一种面向对象编程的语言,所以你经常可能会看到面向"对象& ...

  4. python爬取公众号阅读量_分享一个牛逼的Python项目:公众号文章爬虫

    我订阅了近 100 个公众号,有时候想再找之前读过的文章,发现搜索起来特别困难,如果忘了收藏,估计得找半小时,更让人无语的是,文章已经发布者删除,或者文章因违规被删除.那么有没有这样的爬虫,可以将公众 ...

  5. Google推出了牛逼的Python在线编辑器,以后协同项目代码就省心了

    Google推出了牛逼的Python在线编辑器,以后协同项目代码就省心了,环境配置对于大多数人来说都是拦路虎,我们小白往往不知道: 怎么正确的安装 不知道选择什么 怎么安装常用的第三方库 ... Go ...

  6. python 公众号文章发布_分享一个牛逼的Python项目:公众号文章爬虫

    我订阅了近 100 个公众号,有时候想再找之前读过的文章,发现搜索起来特别困难,如果忘了收藏,估计得找半小时,更让人无语的是,文章已经发布者删除,或者文章因违规被删除.那么有没有这样的爬虫,可以将公众 ...

  7. 一些牛逼的Python程序整理

    有网友在 Quora 上提问,「你用 Python 写过最牛逼的程序/脚本是什么?」.本文摘编了 3 个国外程序员的多个小项目,含代码. Manoj Memana Jayakumar, 3000+ 顶 ...

  8. python做什么项目好_推荐两个牛逼的Python项目

    首先能问出这种问题的一定没好好看我之前写的这篇文章:丧心病狂的Github技巧,你要是学会了这篇文章的技巧,我相信你肯定不会再问我怎么找项目了. 但是看着有一两千的人给我的留言点赞,都想要Python ...

  9. 你以为买到了牛逼的Python课程,其实被割了韭菜!

    首先我先说一下,我这篇文章毫无营销!纯粹点评互联网教育存在的不良风气! 不知道什么时候开始,互联网教育开始到处充斥着"烂鱼烂虾",各种新起机构在网络平台卖课,尤其是在腾讯课堂上面, ...

最新文章

  1. 常见四大类型视频接线DP、HDMI、DVI、VGA的比较
  2. 关于LoginFilter的问题
  3. Java Maven Profiles多环境一键部署
  4. 设计模式 - 建造者模式(Builder Pattern)
  5. ON DUPLICATE KEY UPDATE 附带更新条件
  6. 使用 ssh 命令来访问(登录/连接)远程服务器主机
  7. 日历视图的XML属性
  8. Action重定向总结
  9. 有4个节点可以构造出 二叉树_简单4个步骤就可以拍摄出美丽的城市夜景,赶紧试试吧...
  10. Django数据库补充之事务
  11. 国内外物联网平台初探(篇五:机智云平台)
  12. japidocs怎么设置参数必填_常用的3种拍摄模式,相机参数怎么设置?如何正确曝光?...
  13. 基于DevExpress XtraGrid控件实现的凭证式显示
  14. MySQL 入门(三)—— MySQL数据类型
  15. 史上最全最详细的APP运营推广策划方案
  16. 点云的降采样:八叉树采样(Octree)
  17. 电信机顶盒中心服务器连接异常,电信电视盒子连不上网的解决方法
  18. 2022年广东省安全员A证第三批(主要负责人)考试练习题及在线模拟考试
  19. 共识算法比较Tendermint的BFT与EOS的dPoS
  20. Java项目:快递取件管理系统(java+SSM+JSP+jQuery+Mysql)

热门文章

  1. 高考 | 满分作文:《我们都是读“书”人》
  2. 数据结构 (计算机存储、组织数据方式)
  3. git 服务器+git linux客户端搭建测试2
  4. linux slf4j找不到,SLF4J错误消息
  5. mysql事务 可见性,【每日阅读】2020年12月09日-事务先后的可见性
  6. ajax请求 禁用缓存,jQuery ajax缓存禁用无法正常工作?
  7. python qq机器人框架有哪些_使用Python的Tornado框架实现一个简单的WebQQ机器人
  8. mysql opensuse_opensuse免安装mysql
  9. mysql自定义多选排序_前端框架(二)DIV多选复选框框的封装和MySql数据库存取...
  10. C语言中兴面试编程题,中兴一套笔试题及部分答案