python requests模拟登录_Python requests模拟登陆知乎

python爱好者,参照fuck-login等项目尝试写爬虫。

首先打开知乎登陆页面,随便输入个账号密码进行尝试登陆,拿到登陆表单和请求头,以下所用工具为chrome开发者工具。

可以看到表单由五项构成,未知的三项分别为,_xsrf,captcha_type,captcha

请求头主要由User-Agent, Referer, Host三项构成。

所以请求头如下。

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'

,'Referer':'https://www.zhihu.com/',

'Host':'www.zhihu.com'

表单三项首先解决_xsrf。尝试在页面中搜索xsrf,得到如下结果。

可以看到,_xsrf就在网页源码中,并且value值与表单项中一样,所以在这里采用正则表达式或者BeautifulSoup来提前。

注意应该用requests库中的session方法来进行以下操作,因为知乎会对cookie进行检验。应

保证以下操作和以后对的爬取内容均在一个会话中。

session = requests.session()

url_xsrf = session.get('https://www.zhihu.com',headers=headers)

html_xsrf = BeautifulSoup(url_xsrf.content,'lxml')

xsrf = html_xsrf.find('input')

由于知乎验证码是倒立的汉字,由图1可看出表单项中captcha项为倒立的字的坐标,此处不知该如何获取,观察到captcha_type这个字段的值为cn,遂尝试将值改为en请求看看结果如何。

选择左侧captch.gif选项,将cn改成en尝试获取验证码。

尝试成功,获取的是原来的知乎验证码,字母数字的组合。

此处captcha_url中str(int(time.time()))*1000,经观察requests url 中的r=150.......这一串数字很像时间戳,经验证果然是。

captcha_url = 'https://www.zhihu.com/captcha.gif?r='+str(int(time.time()*1000))+'&type=login&lang=en'

req_captcha = session.get(captcha_url,headers=headers)

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

f.write(req_captcha.content)

将验证码图片保存至本地后,手动输入至程序中,至此,请求头构建完毕。

data = {'phone_num':手机号,

'password': 密码,

'captcha_type':'en',

'captcha':手动输入,

'_xsrf':xsrf

}

开始尝试登陆

req = session.post('https://www.zhihu.com/login/phone_num',headers=headers,data=data)

print(req.json()['msg'])

登陆成功,验证是否登陆成功,获取首页内容,检验和网页显示是否一致。

import re

req_sighin = session.get('https://www.zhihu.com',headers=headers)

html_sighin = BeautifulSoup(req_sighin.content,'lxml')

html_sighin.find('a',{'href':re.compile('//zhuanlan.zhihu.com/p/[0-9]*')})

可以看到,成功获取知乎首页内容,至此,模拟登陆成功,可以进行进一步的爬取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值