1,前言

在爬虫的世界里,模拟登录是一项必备的技能,很多网站登录才能有浏览信息的权限,今天就在python来模拟登录知乎

2,获取登录时post的参数

在网页上输入知乎的url:https://www.zhihu.com/#signin,随便输入一个手机号(13265604588)和密码(1234),按f12,然后点击登录,在 network就能获取提交的表单

这里登录时需要提交的数据有四个:手机号码和密码由我们自己输入,_xsrf 为知乎的隐藏随机码,captcha_type 为验证码类型

请求的url是:https://www.zhihu.com/login/phone_num,后面会用到

2.1 获取_xsrf

在登录页面右键检查网页源码,就可以在提交表单那里发现

<input type="hidden" name="_xsrf" value="

37616639663361332d393965632d346634632d396166362d356538383763653738367

">

这个通过一个正则表达式就可以提取出来

text = '<input type="hidden" name="_xsrf" value="37616639663361332d393965632d346634632d396166362d356538383763653738367">'
match_obj = re.match('.*name="_xsrf" value="(.*?)"',text)








    if match_obj:print (match_obj.group(1))


其中在提取那里(.*?)要注意加入问号取消贪婪匹配

方法代码如下:
def get_xsrf():#获取xsrf coderesponse = session.get("https://www.zhihu.com",headers = header)match_obj = re.match('.*name="_xsrf" value="(.*?)"',response.text)# print(match_obj.group(1))if match_obj:return (match_obj.group(1))return ""

2.2 获取验证码

def get_captcha():t = str(int(time.time() * 1000))captcha_url = 'https://www.zhihu.com/captcha.gif?r=' + t + "&type=login"print(captcha_url)response = session.get(captcha_url, headers=header)with open('captcha.gif', 'wb') as f:f.write(response.content)f.close()from PIL import Imagetry:im = Image.open('captcha.gif')im.show()im.close()except:passcaptcha = input('请输入验证码: ')return captcha
这里的获取验证码需要人工验证,按照生成的gif输入即可

 3,创建登录函数

import requestsimport resession =requests.session()agent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36"
header = {"HOST":"www.zhihu.com","Referer": "https://www.zhizhu.com",'User-Agent': agent
}

def zhihu_login(account,password):#知乎登录if re.match("^1\d{10}",account):print("手机号码登录")
   #前面提取的手机号码登录请求urlpost_url = "https://www.zhihu.com/login/phone_num"post_data = {"_xsrf": get_xsrf(),"phone_num": account,"password": password,"captcha":get_captcha()}response_text = session.post(post_url,data=post_data,headers=header)
这样结合之前的的get_xsrf,get_captcha方法就能顺利登录知乎了,如何验证?

4,检验登录是否成功
在未登录成功时是无法访问查询个人私信的网站:https://www.zhihu.com/inbox
在网页上输入该网址


可以看到访问身份信息为302即临时跳转,知乎将我们网址跳转到登录界面,即没有访问权限,可以通过检验response的身份信息来检验是否登录成功,代码如下
def is_login():#通过个人中心页面返回状态码来判断是否为登录状态inbox_url = "https://www.zhihu.com/inbox"#allow_redirects使重定向为falseresponse = session.get(inbox_url, headers=header, allow_redirects=False)if response.status_code != 200:return Falseelse:return True
这里注意session的allow_redirects参数, 取消了网页重定向功能。如果不取消,即使访问失败也会重新跳转到登录界面,这样返回的身份信息还是 200

5,完整代码
import requests
import resession =requests.session()agent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36"
header = {"HOST":"www.zhihu.com","Referer": "https://www.zhizhu.com",'User-Agent': agent
}def get_xsrf():#获取xsrf coderesponse = session.get("https://www.zhihu.com",headers = header)# print(response.text)# text = '<input type="hidden" name="_xsrf" value="37616639663361332d393965632d346634632d396166362d356538383763653738363637">'match_obj = re.match('.*name="_xsrf" value="(.*?)"',response.text)# print(match_obj.group(1))if match_obj:return (match_obj.group(1))return ""def get_captcha():import timet = str(int(time.time()*1000))captcha_url = "https://www.zhihu.com/captcha.gif?r={0}&type=login".format(t)t = session.get(captcha_url, headers=header)with open("captcha.jpg","wb") as f:f.write(t.content)f.close()from PIL import Imagetry:im = Image.open('captcha.jpg')im.show()im.close()except:passcaptcha = input("输入验证码\n>")return captchadef zhihu_login(account,password):#知乎登录if re.match("^1\d{10}",account):print("手机号码登录")post_url = "https://www.zhihu.com/login/phone_num"post_data = {"_xsrf": get_xsrf(),"phone_num": account,"password": password,"captcha":get_captcha()}response_text = session.post(post_url,data=post_data,headers=header)def is_login():#通过个人中心页面返回状态码来判断是否为登录状态inbox_url = "https://www.zhihu.com/inbox"#allow_redirects使重定向为falseresponse = session.get(inbox_url, headers=header, allow_redirects=False)if response.status_code != 200:return Falseelse:return Truezhihu_login("yourPhoneNumber","password")
print(is_login())
运行结果:

												

python3模拟登录知乎相关推荐

  1. [Python]网络爬虫(三):使用cookiejar管理cookie 以及 模拟登录知乎

    大家好哈,上一节我们研究了一下爬虫的异常处理问题,那么接下来我们一起来看一下Cookie的使用. 为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在 ...

  2. Python爬虫初学(三)—— 模拟登录知乎

    模拟登录知乎 这几天在研究模拟登录, 以知乎 - 与世界分享你的知识.经验和见解为例.实现过程遇到不少疑问,借鉴了知乎xchaoinfo的代码,万分感激! 知乎登录分为邮箱登录和手机登录两种方式,通过 ...

  3. 2019年最新 Python 模拟登录知乎 支持验证码

    2019年最新 Python 模拟登录知乎 支持验证码和保存 Cookies 知乎的登录页面已经改版多次,加强了身份验证,网络上大部分模拟登录均已失效,所以我重写了一份完整的,并实现了提交验证码 (包 ...

  4. HttpClient4.4.1模拟登录知乎

    HttpClient4.4.1模拟登录知乎 一,登录要Post的表单数据是什么 这部分可以使用Wireshark工具来抓包就可以了,发现需要以下数据: "_xsrf" = xxxx ...

  5. 小试牛刀:使用Python模拟登录知乎

    2019独角兽企业重金招聘Python工程师标准>>> 作者:刘帝伟(微博:@拾毅者) 原文链接:点击这里 BitTiger尊重原创版权,转载已经过授权. 最近突然对爬虫兴趣倍增,主 ...

  6. Python爬虫:模拟登录知乎完全详解

    [源码在最下面] 知乎登录分为邮箱登录和手机登录两种方式,通过浏览器的开发者工具查看,我们通过不同方式登录时,网址是不一样的.邮箱登录的地址email_url = 'https://www.zhihu ...

  7. 使用Python模拟登录知乎

    环境与开发工具 在抓包的时候,开始使用的是Chrome开发工具中的Network,结果没有抓到,后来使用Fiddler成功抓取数据.下面逐步来细化上述过程. 模拟知乎登录前,先看看本次案例使用的环境及 ...

  8. python爬_python爬虫--模拟登录知乎

    1.处理登录表单 处理登录表单可以分为2步: 第一.查看网站登录的表单,构建POST请求的参数字典: 第二.提交POST请求. 打开知乎登录界面,https://www.zhihu.com/#sign ...

  9. 爬虫模拟登陆手机验证码_爬虫入门到精通-headers的详细讲解(模拟登录知乎)...

    本文章属于爬虫入门到精通系统教程第七讲 直接开始案例吧. 本次我们实现如何模拟登陆知乎. 1.抓包 1. 首先打开知乎登录页 知乎 - 与世界分享你的知识.经验和见解 注意打开开发者工具后点击&quo ...

最新文章

  1. 超级计算机 任务提交,vasp在超算中心的任务提交 - 第一原理 - 小木虫 - 学术 科研 互动社区...
  2. docker 报错 /usr/bin/docker-current: Error response from daemon: driver failed programming external
  3. 内存和swap查看 内存是拿来用的 不是看的
  4. 02 | 系统可用性:没有故障,系统就一定是稳定的吗?
  5. javascript js jquery获取元素位置代码总结
  6. 基于C++实现五子棋AI算法思想
  7. THINKPHP中使用swoole
  8. Entity Framework Core 实现全局查询过滤
  9. python条形码_python3转换code128条形码
  10. 【Computer Organization笔记17】大实验讨论:各组数据通路展示
  11. unity,生成的mac版游戏切场景时卡死解法
  12. 子网掩码和IP地址计算网络地址和广播地址的换算
  13. 计算机组成原理 14个指令缩写
  14. Qt High DPI解决方案
  15. LCD RGB 控制技术 时钟篇(上)
  16. 元数据管理——企业数据治理的基石
  17. Python爬虫登录大学官网
  18. 分析会计选择在税收筹划中的运用
  19. PDFBox加密和解密PDF文件
  20. cpu 分支预测对性能的影响

热门文章

  1. Apollo星火计划学习笔记——第一讲 使用Apollo学习自动驾驶
  2. 【京东电商网站主界面仿写——HTML第二部分】
  3. 校园助手APP--简介及框架
  4. doc文件文本结构提取
  5. 阿里云部署SVN服务器
  6. 人生于世上,有几个知己……
  7. java poi导出PPT格式
  8. IDEA 中 Maven运行tomacat7出现A child container failed during start错误
  9. 虚拟空间对新闻媒体的真实挑战
  10. eclipse里面运行tomcat显示无法显示页面