#coding:utf-8 #__author__='wang' import re import requests headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0','HOST':'www.zhihu.com','Referer': 'https://www.zhihu.com/signin?next=%2F'} def get_index_page(): response = requests.get('https://zhihu.com',headers=headers) with open('index.html','w') as file_test: file_test.write(response.content) print 'OK' # get_index_page() #用于获取网站返回的xsrf的值,用于登录时放在请求体中,一般是网站为了防止跨站请求 伪造攻击而设置的一个随机字符串。当登录时没有提交这个xsrf的值,后台服务器会认为 这是一个非法登录,那么可能就会产生一个验证码进行确认登录。一般在浏览器中,该值是 不需要用户填写的,而是放在cookie中的 def get_xsrf(): response = requests.get('https://www.zhihu.com/signin', headers=headers) #访问登录页面,从响应头中取出xsrf的值 res = response.headers['Set-Cookie'] match_obj = re.search(r'_xsrf=(.*?);',res) if match_obj: #如果匹配成功,对象存在 xsrf = match_obj.group(1) #除了需要返回xsrf随机值,还需要将res这个cookie信息返回,为了将cookie 添加到下一次请求中 return xsrf,res else: #没有找到xsrf的值 return None #定义登录知乎的函数 def zhihu_login(account,password): #301:URL永久性重定向 #302:URL的临时重定向 post_url = 'https://www.zhihu.com/login/phone_num' xsrf,cookie =get_xsrf() #将cookie放到请求头中 headers['Cookie'] = cookie post_data = {'_xsrl':xsrf,'phone_num':account,'password':password,} response = requests.post(post_url,post_data,headers=headers) print response.content
zhihu_login('*******','*******')