第一种情形
这种例子实在也比较多,现在很多网站的登录都是第一种的方法,这里通过以github为例子:
剖析页面
获取authenticity_token信息
我们都知道登录页面这里都是一个form表单提交,我可以可以通过谷歌浏览器对其进行剖析
如上图我们找到了这个token信息
以是我们在登录之前该当先通过代码访问这个登录页面获取这个authenticity_token信息
获取上岸页面的cookie信息
set-cookie这里是登录页面的cookie
剖析登录包获取提交地址
当我们输入用户名和密码之后点击提交,我们可以从包里找到如上图的地址,便是post要求提交form的信息
要求的地址:https://github.com/session
要求的参数有:
\"大众commit\公众: \"大众Sign in\公众,
\"大众utf8\"大众:\公众✓\"大众,
\"大众authenticity_token\"大众:“KM6Q0mM9FtI95wYsI/WU3BnaMbYrmV60c0YTQlZjBuAuYa193LP2Gd8BTCmQBSFvPFZRlk3/1TFOnOgGUdy7Ig==”,
\"大众login\公众:\"大众hjzhaofan@163.com\"大众,
\"大众password\"大众:\"大众123\"大众
从这里我们也可以看出提交参数中的“authenticity_token”,而这个参数便是须要我们从上岸页面先获取到。
当我们登录成功后:
再次访问github,这个时候cookie里就增加了两个cookie信息,而这个信息是登录后在增加的信息
以是如果我们想要通过程序登录,我们就须要在登录成功后再次获取cookie信息
然后通过这个cookie去访问我们github的其他信息例如我们的个人信息设置页面:
https://github.com/settings/profile
代码实现
下面代码实现了登录并访问https://github.com/settings/repositories
import requestsfrom bs4 import BeautifulSoupBase_URL = \公众https://github.com/login\"大众Login_URL = \"大众https://github.com/session\"大众def get_github_html(url): ''' 这里用于获取登录页的html,以及cookie :param url: https://github.com/login :return: 登录页面的HTML,以及第一次的cooke ''' response = requests.get(url) first_cookie = response.cookies.get_dict() return response.text,first_cookiedef get_token(html): ''' 处理登录后页面的html :param html: :return: 获取csrftoken ''' soup = BeautifulSoup(html,'lxml') res = soup.find(\公众input\公众,attrs={\公众name\"大众:\公众authenticity_token\公众}) token = res[\"大众value\"大众] return tokendef gihub_login(url,token,cookie): ''' 这个是用于登录 :param url: https://github.com/session :param token: csrftoken :param cookie: 第一次登录时候的cookie :return: 返回第一次和第二次合并后的cooke ''' data= { \"大众commit\"大众: \"大众Sign in\"大众, \"大众utf8\"大众:\"大众✓\公众, \公众authenticity_token\"大众:token, \"大众login\"大众:\"大众你的github账号\公众, \"大众password\公众:\"大众\"大众 } response = requests.post(url,data=data,cookies=cookie) print(response.status_code) cookie = response.cookies.get_dict() #这里注释的阐明一下,是由于之前github是通过将两次的cookie进行合并的 #现在不用了可以直接获取就行 # cookie.update(second_cookie) return cookieif __name__ == '__main__': html,cookie = get_github_html(Base_URL) token = get_token(html) cookie = gihub_login(Login_URL,token,cookie) response = requests.get(\"大众https://github.com/settings/repositories\"大众,cookies=cookie) print(response.text)
第二种情形
这里通过伯乐在线为例子,这个相对付第一种就比较大略了,没有太多的剖析过程直接发送post要求,然后获取cookie,通过cookie去访问其他页面,下面直接是代码实现例子:
http://www.jobbole.com/bookmark/ 这个地址是只有登录之后才能访问的页面,否则会直接返回登录页面
这里说一下:http://www.jobbole.com/wp-admin/admin-ajax.php是登录的要求地址这个可以在抓包里可以看到
import requestsdef login(): url = \公众http://www.jobbole.com/wp-admin/admin-ajax.php\公众 data = { \公众action\"大众: \"大众user_login\"大众, \"大众user_login\公众:\"大众zhaofan1015\"大众, \"大众user_pass\"大众: '', } response = requests.post(url,data) cookie = response.cookies.get_dict() print(cookie) url2 =\公众http://www.jobbole.com/bookmark/\公众 response2 = requests.get(url2,cookies=cookie) print(response2.text)login()
做什么事情都须要不断地坚持下去,编程也一样。现在python措辞十分火热,职场对python的需求也很高,薪资报酬都很棒。以是希望大家能够坚持学习,‘剩’者为王,坚持下来的人才有资格称王。如果你以为本文对你的学习有帮助的话,不妨点个关注,我会持续更新。