Python爬蟲番外篇之關於登錄
常見的登錄方式有以下兩種:
- 查看登錄頁面,csrf,cookie;授權;cookie
- 直接發送post請求,獲取cookie
上面只是簡單的描述,下面是詳細的針對兩種登錄方式的時候爬蟲的處理方法
第一種情況這種例子其實也比較多,現在很多網站的登錄都是第一種的方法,這裡通過以github為例子:
分析頁面
獲取authenticity_token信息
我們都知道登錄頁面這裡都是一個form表單提交,我可以可以通過谷歌瀏覽器對其進行分析
如上圖我們找到了這個token信息所以我們在登錄之前應該先通過代碼訪問這個登錄頁面獲取這個authenticity_token信息
獲取登陸頁面的cookie信息
set-cookie這裡是登錄頁面的cookie
分析登錄包獲取提交地址
當我們輸入用戶名和密碼之後點擊提交,我們可以從包里找到如上圖的地址,就是post請求提交form的信息
請求的參數有:
"commit": "Sign in",
"utf8":"?",
"authenticity_token":「KM6Q0mM9FtI95wYsI/WU3BnaMbYrmV60c0YTQlZjBuAuYa193LP2Gd8BTCmQBSFvPFZRlk3/1TFOnOgGUdy7Ig==」,
"password":"123"
從這裡我們也可以看出提交參數中的「authenticity_token」,而這個參數就是需要我們從登陸頁面先獲取到。當我們登錄成功後:
再次訪問github,這個時候cookie里就增加了兩個cookie信息,而這個信息是登錄後在增加的信息
所以如果我們想要通過程序登錄,我們就需要在登錄成功後再次獲取cookie信息
然後通過這個cookie去訪問我們github的其他信息例如我們的個人信息設置頁面:
代碼實現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
※消息隊列NetMQ 原理分析5-StreamEngine、Encord和Decord
※python函數(5):迭代器和生成器
※MySQL優化-所需了解的基礎知識
※數組排序之冒泡排序
TAG:科技優家 |
※The Weeknd和Bella Hadid又分手了!北美意難忘番外篇?
※Fragment 番外篇——TabLayout+ViewPager+Fragment
※華為P20登頂DxOMark Mobile榜單的故事——番外篇
※flowers新刊推出海街diary番外篇和香蕉魚插圖日曆
※Snake Eyes 將成為《G.I. Joe》系列電影番外篇主角
※flowers新刊推出「海街diary」番外篇和「香蕉魚」插圖的2019日曆
※吉田秋生「海街diary」最終第9捲髮售,收錄番外篇
※轉帖:CC機設番外篇 重裝轟鳴 一騎當千!SHF 蝙蝠摩托 Bat Pod
※《偶像大師》番外篇《偶像大師 SideM 有理由mini》完結
※強森發ins:"速激"番外篇殺青!
※造型特輯 | 番外篇 :澳門95後潮搭 Supreme。
※<>里最火點心之番外篇:蛋黃酥
※「BigBang」「新聞」190627 Ds house 第十五集及金澤一日游番外篇,26日上線啦??
※Switch第八世代《寶可夢》情報都在這!——「寶可夢」故事番外篇
※假面騎士時王確定是decade番外篇,王小明失憶的原因找到了
※2018年VR/AR十大關鍵詞(番外篇):移動AR
※CEO日記——番外篇 我是話外音
※一播出就登上綜藝Top榜,《圓桌派》番外篇依舊功力不減
※狼人洗白錄之番外篇
※《紫羅蘭永恆花園》光碟第4卷將收錄番外篇OVA