常見的登陸方式有如下兩種: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()