第十二篇 requests模拟登陆知乎
了解http常见状态码

可以通过输入错误的密码来找到登陆知乎的post:url

把Headers拉到底部,可以看到form data

_xsrf是需要发送的,需要发送给服务端,否则会返回403错误,提示用户没权限访问
获取xsrf的方法:
# -*- coding: utf-8 -*- import requests,re
#py2里叫cookielib,py3里叫cookiejar
try:
import cookielib
except:
import http.cookiejar as cookielib #拿到浏览器设置的用户代理
User_Agent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36"
#定义header,注意:header里的key是固定的
header = {
"HOST":"www.zhihu.com",
"Referer":"https://www.zhihu.com",
"User-Agent":User_Agent
}
def get_xsrf():
#可以通过自定义请求头来传入User-Agent
response = requests.get("http://www.zhihu.com",headers=header)
print(response.text)
return '' get_xsrf()

接着使用re模块来获取到这一行数值
#如果匹配不到,那可能是中间有换行符的原因,可以加上re.dotall
match_obj = re.match('.*name="_xsrf" value="(.*?)"', response.text, re.DOTALL)
每次查看知乎页面要用get和post创建新连接效率不高,可以使用session,后面使用requests的方法就在session上调用
session = requests.session()
session = requests.session()
#给session的cookies方法重新指定,cookielib类实例出来的LWPCookieJar方法可以很方便的保存文件
#可以指定一个文件名,如果文件不存在会自动创建。
session.cookies = cookielib.LWPCookieJar(filename="cookies.txt") try:
#加载cookies
session.cookies.load(ignore_discard=True)
except:
print("cookie未能加载") def get_index():
"""
前面用session保存了cookie到本地,这里我再用session调用get方法时,会自动把cookie带过去。
:return:
"""
response = session.get("https://www.zhihu.com", headers=header)
with open("index_page.html","wb") as f:
f.write(response.text.encode('utf-8'))
print("OK")
要判断是否已登陆,可以访问一些需要登陆才有权限访问的页面,比如知乎页面的登陆后的我的私信页面,用FireFox可以先看到返回状态:302临时重定向
接着301重定向,不过我用chrome检测,直接从第三行数据开始展示

所以可以获取状态码来判断是否登陆:
PS:get方法有个参数allow_redirects是否允许重定向,默认是True,如果访问的url状态是301/302,则会去访问重定向的url
def is_login():
#通过个人的私信页面判断是否已登陆
inbox_url = "https://www.zhihu.com/inbox"
#allow_redirects参数是否跳转到重定向的url
response = session.get(inbox_url,headers=header,allow_redirects=False)
if response.status_code != 200:
status_code = False
else:
status_code = True
return status_code
测试获取xsrf时服务器返回500错误,这个是因为使用requests模块时,没有设置浏览器的用户代理,不同的浏览器这个值是不一样的,有的服务器会验证这个是否合法的,这是服务器的一种防御策略。

处理方法:
在知乎登陆界面F12,刷新页面,找到Header请求头:

第十二篇 requests模拟登陆知乎的更多相关文章
- Requests模拟登陆
requests模拟登陆知乎网站 实例 # -*- coding: utf-8 -*- __author__ = 'CQ' import requests try: import cookielib ...
- 第十二篇 Integration Services:高级日志记录
本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...
- Python开发【第二十二篇】:Web框架之Django【进阶】
Python开发[第二十二篇]:Web框架之Django[进阶] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...
- 【译】第十二篇 Integration Services:高级日志记录
本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...
- 跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探
SpringCloud系列教程 | 第十二篇:Spring Cloud Gateway初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如 ...
- 解剖SQLSERVER 第十二篇 OrcaMDF 行压缩支持(译)
解剖SQLSERVER 第十二篇 OrcaMDF 行压缩支持(译) http://improve.dk/orcamdf-row-compression-support/ 在这两个月的断断续续的开发 ...
- 第十二篇 SQL Server代理多服务器管理
本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...
- Python之路【第十二篇】:JavaScrpt -暂无内容-待更新
Python之路[第十二篇]:JavaScrpt -暂无内容-待更新
- 【译】第十二篇 SQL Server代理多服务器管理
本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...
随机推荐
- 20140919 进程间通信 系统栈 用户栈 多级反馈队列 windows 内存管理
1.进程间通信 共享内存(剪切板) 匿名管道只能实现父子进程间的通信(以文件系统为基础): 匿名管道是什么,有什么用,怎么用 1.创建父进程,也就是在解决方案中建立一个parent的工程 2.在par ...
- SQL语句的执行顺序和效率
今天上午在开发的过程中,突然遇到一个问题,需要了解SQL语句的执行顺序才能继续,上网上查了一下相关的资料,现整理如下:一.sql语句的执行步骤: 1)语法分析,分析语句的语法是否符合规范,衡量语句中各 ...
- zabbix--Simple checks 基本检测
开始 Simple checks 通常用来检查远程未安装代理或者客户端的服务. 使用 simple checks,被监控客户端无需安装 zabbixagent 客户端, zabbix ser ...
- bootstrap学习(三)表单
基本实例: from-group:可以是其内的标签排列更好 from-control:使标签宽度为100% <form> <div class="form-group&qu ...
- fixture实战---通过fixure,解决方法依赖逻辑
import pytest@pytest.fixture()def login(): print('输入用户名密码登陆') def test_cart(login): print('用例1,登陆后执行 ...
- mac 完全卸载vscode
原文分隔线====================== while writing go this morning, I found that the wrong code are not under ...
- mysql几个常见错误记录
select时找不到表:大小写问题 show variables like '%lower_case_table_names%'; MySQL表名大小写敏感导致的问题 使用help_topic时的se ...
- python字典拼接方法
python的dict拼接有多种方法,其中一种很好用而且速度非常快: x = {**a, **b} 效果等价于: x = a.copy() x.update(b) 注意update()是没有返回值的 ...
- Postfix+Dovecot+MySQL搭建邮件服务器
网上有很多使用Postfix搭建邮件服务器的文章,但目前貌似没有看到较为完整的一篇.本例将尝试在Ubuntu系统中使用Postfix+Dovecot+MySQL搭建邮件服务器. 说到邮件服务器,网上有 ...
- ie 图片拉伸
终于发现只要设置img为 height:auto,width:auto,就不会出现这种情况了 img { height: auto; width: auto; }