python3模拟登录知乎
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模拟登录知乎相关推荐
- [Python]网络爬虫(三):使用cookiejar管理cookie 以及 模拟登录知乎
大家好哈,上一节我们研究了一下爬虫的异常处理问题,那么接下来我们一起来看一下Cookie的使用. 为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在 ...
- Python爬虫初学(三)—— 模拟登录知乎
模拟登录知乎 这几天在研究模拟登录, 以知乎 - 与世界分享你的知识.经验和见解为例.实现过程遇到不少疑问,借鉴了知乎xchaoinfo的代码,万分感激! 知乎登录分为邮箱登录和手机登录两种方式,通过 ...
- 2019年最新 Python 模拟登录知乎 支持验证码
2019年最新 Python 模拟登录知乎 支持验证码和保存 Cookies 知乎的登录页面已经改版多次,加强了身份验证,网络上大部分模拟登录均已失效,所以我重写了一份完整的,并实现了提交验证码 (包 ...
- HttpClient4.4.1模拟登录知乎
HttpClient4.4.1模拟登录知乎 一,登录要Post的表单数据是什么 这部分可以使用Wireshark工具来抓包就可以了,发现需要以下数据: "_xsrf" = xxxx ...
- 小试牛刀:使用Python模拟登录知乎
2019独角兽企业重金招聘Python工程师标准>>> 作者:刘帝伟(微博:@拾毅者) 原文链接:点击这里 BitTiger尊重原创版权,转载已经过授权. 最近突然对爬虫兴趣倍增,主 ...
- Python爬虫:模拟登录知乎完全详解
[源码在最下面] 知乎登录分为邮箱登录和手机登录两种方式,通过浏览器的开发者工具查看,我们通过不同方式登录时,网址是不一样的.邮箱登录的地址email_url = 'https://www.zhihu ...
- 使用Python模拟登录知乎
环境与开发工具 在抓包的时候,开始使用的是Chrome开发工具中的Network,结果没有抓到,后来使用Fiddler成功抓取数据.下面逐步来细化上述过程. 模拟知乎登录前,先看看本次案例使用的环境及 ...
- python爬_python爬虫--模拟登录知乎
1.处理登录表单 处理登录表单可以分为2步: 第一.查看网站登录的表单,构建POST请求的参数字典: 第二.提交POST请求. 打开知乎登录界面,https://www.zhihu.com/#sign ...
- 爬虫模拟登陆手机验证码_爬虫入门到精通-headers的详细讲解(模拟登录知乎)...
本文章属于爬虫入门到精通系统教程第七讲 直接开始案例吧. 本次我们实现如何模拟登陆知乎. 1.抓包 1. 首先打开知乎登录页 知乎 - 与世界分享你的知识.经验和见解 注意打开开发者工具后点击&quo ...
最新文章
- 超级计算机 任务提交,vasp在超算中心的任务提交 - 第一原理 - 小木虫 - 学术 科研 互动社区...
- docker 报错 /usr/bin/docker-current: Error response from daemon: driver failed programming external
- 内存和swap查看 内存是拿来用的 不是看的
- 02 | 系统可用性:没有故障,系统就一定是稳定的吗?
- javascript js jquery获取元素位置代码总结
- 基于C++实现五子棋AI算法思想
- THINKPHP中使用swoole
- Entity Framework Core 实现全局查询过滤
- python条形码_python3转换code128条形码
- 【Computer Organization笔记17】大实验讨论:各组数据通路展示
- unity,生成的mac版游戏切场景时卡死解法
- 子网掩码和IP地址计算网络地址和广播地址的换算
- 计算机组成原理 14个指令缩写
- Qt High DPI解决方案
- LCD RGB 控制技术 时钟篇(上)
- 元数据管理——企业数据治理的基石
- Python爬虫登录大学官网
- 分析会计选择在税收筹划中的运用
- PDFBox加密和解密PDF文件
- cpu 分支预测对性能的影响