代码github地址:zhihu

首先分析知乎登录页,一般模拟登录走的都是手机页,比较方便

分析登录过程

为了得到验证码我特意都输错了几次密码,知乎的登录不一定有验证码,所以我们在代码实现的过程中需要做判断是否需要验证码

引入依赖:

from urllib import request,parse

from bs4 import BeautifulSoup

import http.cookiejar

import json

import random

import time

import configparser

构建全局请求头

因为要模拟手机,所以这里我们用的是手机的user-Agent

def build_opener():

cookie = http.cookiejar.CookieJar()

cookie_processor = request.HTTPCookieProcessor(cookie)

opener = request.build_opener(cookie_processor)

opener.addheaders = [("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"),

("Referer", "https://www.zhihu.com/"),

("Origin", "https://www.zhihu.com/"),

("Host", "www.zhihu.com")]

request.install_opener(opener)

登录过程

def login(code=0):

login_data = configparser.ConfigParser()

login_data.read("user.ini") #将用户名密码放在user.ini配置文件

username = login_data.get("LoginInfo", "email")

password = login_data.get("LoginInfo", "password")

url = 'https://www.zhihu.com/signin'

login_url = 'https://www.zhihu.com/login/email'

captcha_url = 'https://www.zhihu.com/captcha.gif'

req = request.Request(url)

res = request.urlopen(req)

html = res.read().decode('utf-8')

soup = BeautifulSoup(html)

inputs = soup.find_all('input')

_xsrf = inputs[0]['value']

# 构造登录参数

params = {

'email': username,

'password': password,

'_xsrf': _xsrf

}

#如果code是1,说明需要验证码,读取验证码并写入到本地,然后手动输入验证码

if code == 1:

cap_parms = parse.urlencode({"r": time.time(), "type": "login"}).encode('utf-8')

captcha_req = request.Request(captcha_url,cap_parms,method="GET")

captcha_res = request.urlopen(captcha_req)

fo = open('captcha.jpg','wb+')

fo.write(captcha_res.read())

fo.close()

captcha = input("请输入验证码:\n")

params['captcha'] = captcha

params = parse.urlencode(params).encode('utf-8')

req = request.Request(login_url,params,method="POST")

res = request.urlopen(req)

result = res.read().decode('utf-8')

login_result = json.loads(result)

if login_result['r'] == 0:

print('登陆成功')

else:

if login_result['errcode'] == 1991829:

login(1)

else:

print(login_result['msg'])

login()

最后

if __name__ == '__main__':

build_opener()

login()

实例效果

zhihu.gif

python 知乎登录_python3模拟知乎登录相关推荐

  1. python博客园_python3 模拟博客园登录

    '''作业题目: 模拟博客园登录 作业需求: 1),启动程序,首页面应该显示成如下格式: 欢迎来到博客园首页 1:请登录 2:请注册 3:文章页面 4:日记页面 5:评论页面 6:收藏页面 7:注销 ...

  2. python使用ssh 中文_Python3制作简易SSH登录工具

    下载W3Cschool手机App,0基础随时随地学编程>>戳此了解 导语 做这个的起因大概是: 电脑里的Xshell不知道为啥突然显示"评估期已过"之类的提示... 记 ...

  3. python post请求实例_Python3模拟curl发送post请求操作示例

    本文实例讲述了Python3模拟curl发送post请求操作.分享给大家供大家参考,具体如下: 后端给的接口样式: curl "http://65.33.44.43:509/pre/upda ...

  4. python课设总结_Python技术分享课总结:用Python模拟知乎自动登录

    原标题:Python技术分享课总结:用Python模拟知乎自动登录 Python语言是由Guido van Rossum大牛在1989年发明,它是当今世界最受欢迎的计算机编程语言之一,也是一门&quo ...

  5. python爬虫登录教程_Python爬虫之模拟知乎登录的方法教程

    前言 对于经常写爬虫的大家都知道,有些页面在登录之前是被禁止抓取的,比如知乎的话题页面就要求用户登录才能访问,而 "登录" 离不开 HTTP 中的 Cookie 技术. 登录原理 ...

  6. 知乎python储存_模拟知乎登录——Python3

    经常写爬虫的都知道,有些页面在登录之前是被禁止抓取的,比如知乎的话题页面就要求用户登录才能访问,而 "登录" 离不开 HTTP 中的 Cookie 技术. 登录原理 Cookie ...

  7. python爬虫模拟与思考_Python爬虫之模拟知乎登录

    昨天受邀在 CSDN 微信群做了一次 Python 技术分享,主题是<用Python模拟知乎登录>,效果非常不错,发现越来越多的人加入到了 Python 阵容中. 经常写爬虫的都知道,有些 ...

  8. 学习笔记 -- 用python中的selenium模拟知乎登录

    文章目录 前言 一.模拟知乎登录的准备 二.登录验证码的问题 1.英文验证码 2.中文倒立文字验证码 三.完整代码如下 四.总结 前言 最近在学习python爬虫,为了巩固爬虫的知识,偶尔会写一些简单 ...

  9. Python爬虫教程,slenium模拟登陆知乎2020

    文章目录 引言 登录成功 解决方案 意外收获 参考资料 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如 ...

最新文章

  1. 1035 Password
  2. qsort函数的用法
  3. 结对开发——环形一维数组求最大子数组和
  4. 如何用Postman做接口测试
  5. LeetCode 1799. N 次操作后的最大分数和(回溯 / 状态压缩DP)
  6. 霸榜 | 微软CV模型收获近 2k star
  7. hdu 5172 GTY's gay friends(线段树最值)
  8. DOM概述 选取文档元素 1
  9. java对象描述开车_java面向对象
  10. HoloLens1开发(二):结合Vuforia开发
  11. python中数据存入execle、读取excel数据
  12. 原创|批处理实现安卓手机一键快速截屏
  13. 高拍仪Twain接口功能
  14. 金融量化分析基础(二)—— 套利
  15. python多线程网易云歌单
  16. jQuery悬浮QQ客服插件
  17. mae python实现_使用Python进行机器学习:从0到1,构建回归模型(附完整教程)
  18. 电池上的PHP是什么,一次电池与二次电池的区别是什么?
  19. 数据科学系列:plotly可视化入门介绍
  20. vue中mapGetters函数前面的三个点是什么意思?

热门文章

  1. This version of the Android Support plugin for IntelliJ IDEA (or Android Studio) cannot open this
  2. 天气预报js调用代码(QQ,新浪,265)
  3. matlab 3维 数据拟合,利用matlab将三维数据拟合成三维曲线
  4. MATLAB的基本知识
  5. Shell 脚本之流程控制
  6. css div网页布局代码 自适应,css+div页面布局之1 -- 自适应
  7. 关于iview弹窗组件的问题
  8. Vant Weapp 0.5.5 发布,有赞小程序 UI 组件库
  9. 使用webWorker执行后台任务
  10. android自定义本地邮箱联想组件(基于MultiAutoCompleteTextView)