python爬_python爬虫--模拟登录知乎

1、处理登录表单

处理登录表单可以分为2步:

第一、查看网站登录的表单,构建POST请求的参数字典;

第二、提交POST请求。

打开知乎登录界面,https://www.zhihu.com/#signin,

20180111003839014175.png

按f12,打开开发者界面:

20180111003839023941.png

在这里面找到headers信息,

现在在用户名和密码处查找信息,

20180111003839030777.png

20180111003839035660.png

发现用户名的属性为account,account中的内容为我们的用户名;

同理,password中的内容为我们的密码。

在登录表单中,有些key值在浏览器中设置了hidden值,不会显示出来,这个时候我们需要去审查元素中去查找,

20180111003839041520.png

发现了,cookie中有一个_xsrf的属性,类似于token的作用。而这个东西的存在,就让我们在模拟登录的时候,必须将这个属性作为参数一起加在请求中发送出去。

而获取_xsrf则可以用之前的BeautifulSoup获取

importrequestsfrom bs4 importBeautifulSoup as bs

session=requests.session()

post_url= ‘https://www.zhihu.com/#signin‘agent= ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/5.1.2.3000 Chrome/55.0.2883.75 Safari/537.36‘headers={"Host": "www.zhihu.com","Referer":"http://www.zhihu.com/",‘User-Agent‘:agent

}

postdata={‘password‘: ‘*****‘,‘account‘: ‘******‘,

}

response= bs(requests.get(‘http://www.zhihu.com/#signin‘,headers=headers).content, ‘html.parser‘)

xsrf= response.find(‘input‘,attrs={‘name‘:‘_xsrf‘})[‘value‘]

postdata[‘_xsrf‘] =xsrf

responed= session.post(‘http://www.zhihu.com/login/email‘,headers=headers,data=postdata)print(responed)

结果显示:

代码做一些修改:

import requests

from bs4 import BeautifulSoup

session = requests.session()

agent = ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/5.1.2.3000 Chrome/55.0.2883.75 Safari/537.36‘

headers = {

"Host": "www.zhihu.com",

"Origin":"https://www.zhihu.com/",

"Referer":"http://www.zhihu.com/",

‘User-Agent‘:agent

}

postdata = {

‘password‘: ‘*****‘,

‘account‘: ‘******‘,

}

response = session.get("https://www.zhihu.com", headers=headers)

soup = BeautifulSoup(response.content, "html.parser")

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

postdata[‘_xsrf‘] =xsrf

login_page = session.post(‘http://www.zhihu.com/login/email‘, data=postdata, headers=headers)

print(login_page.status_code)

运行结果:200

代表响应的状态为请求成功,可以成功登录表单。

原文地址:http://www.cnblogs.com/leon507/p/7633012.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值