码迷,mamicode.com
首页 > 编程语言 > 详细

python爬虫--模拟登录知乎

时间:2017-10-06 21:56:23      阅读:2489      评论:0      收藏:0      [点我收藏+]

标签:用户   处理   password   div   9.png   head   信息   class   ima   

 

 

 

 

 

1、处理登录表单

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

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

第二、提交POST请求。

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

技术分享

按f12,打开开发者界面:

技术分享

 

 在这里面找到headers信息,

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

技术分享

技术分享

 

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

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

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

技术分享

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

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

import requests
from bs4 import BeautifulSoup 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)

结果显示:

<Response [200]>;

代码做一些修改:

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

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

python爬虫--模拟登录知乎

标签:用户   处理   password   div   9.png   head   信息   class   ima   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!