python-爬蟲之requests模塊介紹(登錄github)

介紹git

使用requests能夠模擬瀏覽器的請求,比起以前用到的urllib,requests模塊的api更加便捷(本質就是封裝了urllib3)github

注意api

requests庫發送請求將網頁內容下載下來之後,並不會執行js代碼,這須要咱們本身分析目標站點而後發起新的request請求瀏覽器

安裝cookie

pip3 install requestssession

GET請求

requests.get(url="",
headers={'User-Agent':'',
      'Referer':'',},
Cookie={},        
)    #headers:請求頭信息,User-Agent:瀏覽器標識,Referer:上次請求的url

POST請求

#GET請求
HTTP默認的請求方法就是GET
     * 沒有請求體
     * 數據必須在1K以內!
     * GET請求數據會暴露在瀏覽器的地址欄中

GET請求經常使用的操做:
       1. 在瀏覽器的地址欄中直接給出URL,那麼就必定是GET請求
       2. 點擊頁面上的超連接也必定是GET請求
       3. 提交表單時,表單默認使用GET請求,但能夠設置爲POST


#POST請求
(1). 數據不會出如今地址欄中
(2). 數據的大小沒有上限
(3). 有請求體
(4). 請求體中若是存在中文,會使用URL編碼!


#!!!requests.post()用法與requests.get()徹底一致,特殊的是requests.post()有一個data參數,用來存放請求體數據

發送post請求,模擬瀏覽器的登陸行爲

'''
一 目標站點分析
    瀏覽器輸入https://github.com/login
    而後輸入錯誤的帳號密碼,抓包
    發現登陸行爲是post提交到:https://github.com/session
    並且請求頭包含cookie
    並且請求體包含:
        commit:Sign in
        utf8:✓
        authenticity_token:lbI8IJCwGslZS8qJPnof5e7ZkCoSoMn6jmDTsL1r/m06NLyIbw7vCrpwrFAPzHMep3Tmf/TSJVoXWrvDZaVwxQ==
        login:egonlin
        password:123


二 流程分析
    先GET:https://github.com/login拿到初始cookie與authenticity_token
    返回POST:https://github.com/session, 帶上初始cookie,帶上請求體(authenticity_token,用戶名,密碼等)
    最後拿到登陸cookie

    ps:若是密碼時密文形式,則能夠先輸錯帳號,輸對密碼,而後到瀏覽器中拿到加密後的密碼,github的密碼是明文
'''

import requests
import re

#第一次請求
r1=requests.get('https://github.com/login')
r1_cookie=r1.cookies.get_dict() #拿到初始cookie(未被受權)
authenticity_token=re.findall(r'name="authenticity_token".*?value="(.*?)"',r1.text)[0] #從頁面中拿到CSRF TOKEN

#第二次請求:帶着初始cookie和TOKEN發送POST請求給登陸頁面,帶上帳號密碼
data={
    'commit':'Sign in',
    'utf8':'',
    'authenticity_token':authenticity_token,
    'login':'xxxxxx',
    'password':'xxxxx'
}
r2=requests.post('https://github.com/session',
             data=data,
             cookies=r1_cookie
             )


login_cookie=r2.cookies.get_dict()


#第三次請求:之後的登陸,拿着login_cookie就能夠,好比訪問一些我的配置
r3=requests.get('https://github.com/settings/emails',
                cookies=login_cookie)

print('xxxx' in r3.text) #True

自動登錄github(本身處理cookie)
相關文章
相關標籤/搜索