原标题:Python技术分享课总结:用Python模拟知乎自动登录

Python语言是由Guido van Rossum大牛在1989年发明,它是当今世界最受欢迎的计算机编程语言之一,也是一门“学了有用、学了能用、学会能久用”的计算生态语言。

为此,CSDN作为国内最大的IT中文社区,特向广大Python爱好者开设了Python学习班,帮助大家在学习的道路上少走弯路,事半功倍。3月29号晚上8点,我们特邀请知名Python技术专家刘志军老师在班级里举行分享活动。

刘志军,6年开发经验,曾就职中兴、博雅互动。擅长Web技术架构,对爬虫、数据挖掘领域兴趣浓厚。目前在一家大型医药集团从事数据分析工作。微信公众号:Python之禅(vttalk)。

以下为昨晚的分享内容:

前言

文章会按照先原理,再实践的方式来讲解,希望可以做到知其然且知其所以然,读这篇文章前,你需要对 HTTP 协议、 Cookies、跨站请求伪造(CSRF)有一定了解,如果你不太了解这些概念,文末给出了两个链接推荐阅读。

在做爬虫时,有些页面在登录之前,是被禁止抓取的,比如我们查看知乎的话题页面 https://www.zhihu.com/topic 就要求我 们登录。

当提到「登录」时,就不得不提 Cookie 技术,而说起 Cookie 技术时,还得从 HTTP 协议说起。当然在这里我不会把HTTP 从0到1讲一遍,你只需要了解基本的 HTTP 流程是什么就可以了,推荐阅读我之前在公众号「Python之禅」中写的另一篇文章一次完整的HTTP请求过程HTTP 是一种无状态的协议, 协议本身不保留之前的一切请求信息和响应信息,也就是说,对于一个刚刚发送了HTTP 请求的客户端再次发起请求时,服务端并不知道之前访问过。这样设计的理由是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计如此简单。

但是,无状态导致业务处理就变得棘手了,一个简单的例子就是网上购物的时候,当我在一个页面把商品加入购物车的时候,正当我要跳转到支付页面时,如果没有一种机制来保持我的登录状态,那么之前选的商品全部丢失了。

因此,为了在无状态的 HTTP 协议之上维护会话状态,使服务器可以知道当前是和哪个客户端打交道,于是Cookie 技术应运而生 ,Cookie 通俗的理解就是服务端分配给客户端的一个标识。

Cookie原理其实也非常简单,总共4个步骤维护HTTP会话。

1. 浏览器第一次发起 HTTP 请求时,没有携带任何 Cookie 信息,服务器收到请求并返回给浏览器的HTTP响应,同时

HTTP 响应包括了一个响应头 Set-Cookie 字段,它的值是要设置的 Cookie。

2. 浏览器收到来自服务器的 HTTP 响应,响应头中发现有 Set-Cookie 字段,就会将该字段的值保存在内存或者硬盘中。

3. 浏览器下次给该服务器发送 HTTP 请求时, 会将 Cookie 信息附加在 HTTP 请求的头字段 Cookie 中。

4. 服务器收到这个HTTP请求,发现请求头中有Cookie字段, 便知道之前就和这个用户打过交道了。

理解了 Cookie 的基本原理之后,我们就可以尝试用 Python 来实现模拟知乎登录。

用过知乎的都知道,只要提供用户名和密码以及验证码之后即可登录。当然,这只是我们眼中看到的,而背后隐藏的技术细节还需要借助浏览器来发觉。现在我们就用 Chrome 来查看当我们填完表单后,点击登录的时候究竟发生了什么?

首先进入知乎的登录页面 https://www.zhihu.com/#signin ,打开 Chrome 的开发者工具条(按 F12)先尝试输入一个错误的验证码观察浏览器是如何发送请求的。

从浏览器的请求可以发现几个关键的信息:

1. 登录的 URL 地址是 https://www.zhihu.com/login/email

2. 登录需要提供的表单数据有4个:用户名(email)、密码(password)、验证码(captcha)、_xsrf。

3. 获取验证码的URL地址是 https://www.zhihu.com/captcha.gif?r=1490690391695&type=login

那么 _xsrf 参数是什么?如果你对CSRF(跨站请求伪造)攻击非常熟悉的话,那么你一定知道它的作用,xsrf是一串伪随机数,它是用于防止跨站请求伪造的。它一般存在网页的 form 表单标签中,为了证实这一点,可以在页面上搜索 “xsrf”,果然,从下图可以看到 _xsrf在一个隐藏的 input 标签中 。

到这里,基本上摸清了浏览器登录时所需要的数据是如何获取的了,那么现在就可以开始撸代码用 Python 模拟浏览器来登录。登录时所依赖的两个第三方库是 requests 和 BeautifulSoup,先安装。

pip install beautifulsoup4==4.5.3

pip install requests==2.13.0

获取 xsrf

前面已经找到了 xsrf 所在的标签,,

利用 BeatifulSoup的find方法可以非常便捷的获取该值,当然,如果你熟悉正则表达式,也可以不用 BeatifulSoup

defget_xsrf():response = session.get("https://www.zhihu.com", headers=headers)soup = BeautifulSoup(response.content, "html.parser")xsrf = soup.find('input', attrs={"name": "_xsrf"}).get("value")returnxsrf

获取验证码

验证码是通过 /captcha.gif 接口返回的,这里我们把验证码图片下载保存到当前目录,由人工识别,当然你可以用第三方支持库来自动识别,比如pytesser。

defget_captcha():"""把验证码图片保存到当前目录,手动识别验证码:return:"""t = str(int(time.time() * 1000))captcha_url = 'https://www.zhihu.com/captcha.gif?r='+ t + "&type=login"r = session.get(captcha_url, headers=headers)withopen('captcha.jpg', 'wb') asf:f.write(r.content)captcha = input("验证码:")returncaptcha

登录

一切参数准备就绪之后,就可以请求登录接口了。

deflogin(email, password):login_url = 'https://www.zhihu.com/login/email'data = {'email': email,'password': password,'_xsrf': get_xsrf(),"captcha": get_captcha(),'remember_me': 'true'}response = session.post(login_url, data=data, headers=headers)login_code = response.json()print(login_code['msg'])session.cookies.save()

最后运行返回的结果是“登录成功”。表明登录成功了。细心的你可能已经发现了,我调用了一个 cookies.save() 方法,我是把cookie信息保存到了本地,下次请求其他需要登录的页面时,就可以把 cookie信息携带上了。

session = requests.session()session.cookies = cookiejar.LWPCookieJar(filename='cookies')try:session.cookies.load(ignore_discard=True)except:print("还没有cookie信息")

源码:https://github.com/lzjun567/crawler_html2pdf/blob/master/zhihu/auto_login.py

CSDN Python学习班组织的【攒课】活动正在火热进行中,欢迎Python爱好者报名参与:Python数据分析实战,扫描报名!返回搜狐,查看更多

责任编辑:

python课设总结_Python技术分享课总结:用Python模拟知乎自动登录相关推荐

  1. python课设代码_python课程编程题汇总(上)

    python编程题汇总 众所周知,由于疫情的原因,大家都在上网课,我也不例外啦~ 用这个贴子来记录也和大家分享一下我们课上的编程讨论题 中篇在此→python课程编程题汇总(中) 下篇在此→pytho ...

  2. 计算机组成课设怎么做,计算机组成原理课设1

    计算机组成原理课设1 (12页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 哈工大 年 秋 季学期班号姓名计算机组成原理 试 题题号一二三 ...

  3. 【安卓课设】简单分析本次课设

    目录 1.课设简介 2.课设所用到的开源控件的汇总 2.1所用到的依赖包 2.2各个开源控件Github地址 3.课设所用技术 3.1安卓端 3.2后端 3.3关于前后台交互 4.最终效果展示 5.实 ...

  4. 华北电力大学计算机控制课设,华北电力大学过程计算机控制课设ddc串级回路pid闭环...

    1.课程设计报告课程设计报告名称:过程计算机控制题目: DDC 串级回路 PID 闭环控制系统的设计及实时仿真院系:控计班级: 学号: 学生姓名: 同组人: 指导教师:李明扬设计周数:一周一.设计目的 ...

  5. C语言课设物资管理系统,C语言课设之物资管理系统.doc

    C语言课设之物资管理系统 C语言课程设计 目 录 1.需求分析: 2.系统总框图: 3.每个模块的设计分析: 4.列出所有定义的函数及说明: 5.举例说明1.2个比较有特点的算法: 6.数据分析.完备 ...

  6. 计算机技术与维修结课论文,计算机维护技术结课论文.doc

    计算机维护技术结课论文 学院:信息科学与工程学院 专业:计算机科学技术 班级:0902班 姓名:范佳伟 学号:200948140206 如何配置一台高性能的电脑 这个学期,我们开展了<计算机组装 ...

  7. python就业前景不好_Python就业前景好不好?学Python好找工作吗?【附资料全家桶—网络爬虫入门到实践】...

    Python是目前市场上大家听说最多的编程语言吧,0基础小白学什么?当然Python,转行学什么?也是Python--那么Python的发展前景真的好吗?学完好找工作吗带领大家了解一下吧. 1.就业岗 ...

  8. python编程入门免费_python编程入门 零基础学习Python基础(附带最新免费教程)...

    本篇是面向编程零基础学员的Python入门教程,内容涵盖了Python的基础知识和初步应用.以较轻快的风格,向零基础学习者介绍了一门时下比较流行的.并且用途比较广泛的编程语言.同时,其语法简洁而清晰, ...

  9. python语言基本认识_Python基础语法合集——了解python

    1.  了解Python Python是一种解释型(这意味着开发过程中没有了编译这个环节).面向对象(支持面向对象的风格或代码封装在对象的编程技术).动态数据类型的交互式(可在命令行中通过Python ...

最新文章

  1. 操作系统:用户态和核心态的区别
  2. vilatile 深入理解java虚拟机_深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理)...
  3. 洛谷P3628 [APIO2010]特别行动队(斜率优化)
  4. qt中在QMultiMap中删除自定义数据类的元素
  5. pip/pip3更换国内源
  6. 【更新】Individual Homework Agile Development reading
  7. android wear 2.0.国行,你的智能手表升级Android Wear 2.0系统吗? 快来看看
  8. 网易新财报:游戏养家,教育维稳、音乐快走
  9. 文件管理之文件和文件系统
  10. 如何将每日新闻添加到自己博客中,发送到微信群中
  11. 手写JDBC的几个步骤(针对MySQL8.0以上的mysql数据库)
  12. 我上岸了!深度剖析我的小红书 后台开发面经,以及我的 社招面试题目分享。
  13. “5G消息”应用案例!七大银行试商用情况汇总!
  14. python做性能测试框架_python常用web框架简单性能测试结果分享(包含dja
  15. Windows环境下用cloc统计代码量
  16. golang https服务
  17. 在IT业正确看待实习生岗位
  18. 推荐国产神器Eolink!API优先,Eolink领先!
  19. 浏览器指纹怎么防?反指纹浏览器帮你避免大数据“杀熟”
  20. 基于单片机开发的电子体温计方案

热门文章

  1. java oracle 字符_Oracle转义字符
  2. python gevent教程_Python的gevent框架的入门教程
  3. MySQL JDBC URL各参数详解
  4. pytorch dataset_【小白学PyTorch】16.TF2读取图片的方法
  5. Python、Perl 垫底,C语言才是最环保的编程语言
  6. 用C/C++开发《Photoshop》图像处理软件
  7. Linux文件系统为,浅析Linux文件系统
  8. a4988 脉宽要求_Allegro MicroSystems - A4988: 带转换器和过流保护的 DMOS 微步驱动器
  9. 1039 到底买不买(pat乙级、C++)
  10. pat 乙级 1031 查验身份证(C++)