常见的登陆方式有如下两种:php
上面只是简单的描述,下面是详细的针对两种登陆方式的时候爬虫的处理方法html
这种例子其实也比较多,如今不少网站的登陆都是第一种的方法,这里经过以github为例子:git
获取authenticity_token信息github
咱们都知道登陆页面这里都是一个form表单提交,我能够能够经过谷歌浏览器对其进行分析ajax
如上图咱们找到了这个token信息
因此咱们在登陆以前应该先经过代码访问这个登陆页面获取这个authenticity_token信息浏览器
获取登录页面的cookie信息cookie
set-cookie这里是登陆页面的cookiesession
分析登陆包获取提交地址post
当咱们输入用户名和密码以后点击提交,咱们能够从包里找到如上图的地址,就是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 requests from bs4 import BeautifulSoup Base_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_cookie def get_token(html): ''' 处理登陆后页面的html :param html: :return: 获取csrftoken ''' soup = BeautifulSoup(html,'lxml') res = soup.find("input",attrs={"name":"authenticity_token"}) token = res["value"] return token def 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 cookie if __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 requests def 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()