python 公众号 知乎_python使用requests模块模拟登陆知乎

from bs4 import BeautifulSoup

import requests

import time

def captcha(captcha_data):

with open("captcha.jpg",'wb') as f:

f.write(captcha_data)

text=input("请输入验证码")

def zhihuLogin():

#构建一个session对象,可以保存cookie(相当于urllib中用的cookiejar)

sess= requests.Session()

#请求报头

headers={"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"}

#首先获取登陆页面,找到需要POST的数据,同时记录当前页的cookie值

html=sess.get("https://www.zhihu.com/#signin",headers=headers).text

bs=BeautifulSoup(html,"lxml")

#获取之前get的页面的_xsrf值

#_xsrf防止CSRF攻击(跨站请求伪造),通常叫做跨域攻击,是一种利用网站对用户的一种信任机制来做坏事。

#跨域攻击一般伪装成网站信任的用户请求(利用cookie),盗取用户信息,欺骗web服务器

#所以网站会通过设置一个隐藏字段存放这个MD5字符串,这个字符串用来校验用户cookie和服务器cookie

_xsrf=bs.find("input",attrs={"name":"_xsrf"}).get("value")

#验证码的链接获取,观察发现r的值是根据unix时间戳变得

captcha_url="https://www.zhihu.com/captcha.gif?r=%d&type=login" % (time.time()*1000)

#发送请求得到图片数据流

captcha_data=sess.get(captcha_url,headers=headers).content

text=captcha(captcha_data)

data={

"_xsrf":_xsrf,

"email":"邮箱",

"password":"密码",

"captcha":text

}

resqonse=sess.post("https://www.zhihu.com/login/email",data=data,headers=headers)

print(resqonse.text)

#获取个人主页源码

#myhomepageresqonse=sess.get("主页url",headers=headers)

if __name__=="__main__":

zhihuLogin()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值