1.使用requests處理cookie相關的請求
1.1 回顧cookie和session的差別
- cookie資料存放在客戶的浏覽器上,session資料放在伺服器上。
- cookie不是很安全,别人可以分析存放在本地的cookie并進行cookie欺騙。
- session會在一定時間内儲存在伺服器上。當通路增多,會比較占用你伺服器的性能。
- 單個cookie儲存的資料不能超過4K,很多浏覽器都限制一個站點最多儲存20個cookie。
1.2 爬蟲中為什麼要使用cookie
- 帶上cookie的好處
- 能夠通路登入後的頁面
- 正常的浏覽器在請求伺服器的時候肯定會帶上cookie(第一次請求某個位址除外),是以對方伺服器有可能會通過是否攜帶cookie來判斷我們是否是一個爬蟲,對應的能夠起到一定的反爬的效果
- 帶上cookie的壞處
- 一套cookie往往對應的是一個使用者的資訊,請求太頻繁有更大的可能性被對方識别為爬蟲
- 那麼上面的問題如何解決? 使用多個賬号.
1.3 requests處理cookie相關的請求之session
- requests 提供了一個叫做session類,來實作用戶端和服務端的會話保持
- 會話保持有兩個内涵:
- 儲存cookie
- 實作和服務端的長連接配接
- 使用方法
session = requests.session()
response = session.get(url,headers)
-
動手:
動手嘗試使用session來登入人人網: http://www.renren.com/PLogin.do(先不考慮這個url位址從何而來),請求體的格式:{“email”:“username”, “password”:“password”}
1.4 requests處理cookie相關的請求之cookie放在headers中
了解headers中cookie
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TP3hFb50WZwhnMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzADN3UDOzkTM3ETMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
- headers中的cookie:
- 使用分号(;)隔開
- 分号兩邊的類似a=b形式的表示一條cookie
- a=b中,a表示鍵(name),b表示值(value)
- 在headers中僅僅使用了cookie的name和value
cookie的具體組成的字段
由于headers中對cookie僅僅使用它的name和value,是以在代碼中我們僅僅需要cookie的name和value即可
在headers中使用cookie
headers = {
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
"Cookie":" Pycharm-26c2d973=dbb9b300-2483-478f-9f5a-16ca4580177e; Hm_lvt_98b9d8c2fd6608d564bf2ac2ae642948=1512607763; Pycharm-26c2d974=f645329f-338e-486c-82c2-29e2a0205c74; _xsrf=2|d1a3d8ea|c5b07851cbce048bd5453846445de19d|1522379036"}
requests.get(url,headers=headers)
cookie有過期時間,是以直接複制浏覽器中的cookie可能意味着下一程式繼續運作的時候需要替換代碼中的cookie,對應的我們也可以通過一個程式專門來擷取cookie供其他程式使用;當然也有很多網站的cookie過期時間很長,這種情況下,直接複制cookie來使用更加簡單
1.5 requests處理cookie相關的請求之使用cookies參數
- cookies的形式:字典
cookies = {“cookie的name”:“cookie的value”}
- 使用方法:
requests.get(url,headers=headers,cookies=cookie_dict}
2.人人網登入之js分析流程
2.1 人人網登陸過程中url位址哪裡找?
在前面的人人網登陸過程中,我們找到了一個登陸接口,那麼這個接口從哪裡找到的呢?
可以發現,這個位址就是在登入的form表單中action對應的url位址,回顧前端的知識點,可以發現就是進行表單送出的位址,對應的,送出的資料,僅僅需要:
使用者名的input标簽中,name的值作為鍵,使用者名作為值,密碼的input标簽中,name的值作為鍵,密碼作為值即可
2.2 如果action對應的沒有url位址的時候可以怎麼做?
2.2.1 通過抓包尋找登入的url位址
通過抓包可以發現,在這個url位址和請求體中均有參數,比如
uniqueTimestamp
和
rkey
以及加密之後的
password
這個時候我們可以觀察手機版的登入接口,是否也是一樣的
可以發現在手機版中,依然有參數,但是參數的個數少一些,這個時候,我們可以使用手機版作為參看,來學習如何分析js
3. js分析之檢視js的位置
3.1 觀察按鈕的綁定js事件
通過點選按鈕,然後點選
Event Listener
,部分網站可以找到綁定的事件,對應的,隻需要點選即可跳轉到js的位置
3.2 通過search all file 來搜尋
部分網站的按鈕可能并沒有綁定js事件監聽,那麼這個時候可以通過搜尋請求中的關鍵字來找到js的位置,比如
livecell
點選美化輸出選項
可以繼續在其中搜尋關鍵字
3.3 js分析之觀察js的執行過程
找到js的位置之後,我們可以來通過觀察js的位置,找到js具體在如何執行,後續我們可以通過python程式來模拟js的執行,或者是使用類似js2py直接把js代碼轉化為python程式去執行
觀察js的執行過程最簡單的方式是添加斷點
添加斷點的方式:在左邊行号點選即可添加,對應的右邊BreakPoints中會出現現有的所有斷點
添加斷點之後繼續點選登入,每次程式在斷點位置都會停止,通過如果該行有變量産生,都會把變量的結果展示在Scoope中
在上圖的右上角有1,2,3三個功能,分别表示:
- 1:繼續執行到下一個斷點
- 2:進入調用的函數中
- 3:從調用的函數中跳出來
4. 執行js
js也是一門動态的語言,是以在運作的時候需要js的解釋器,目前現有的類似js2py的工具都不是特别完善,對于簡單的js可以運作,但是複雜的是處理不了的
通過後面的接觸大家會發現,很多js都是進過混淆和加密的,即在js的源碼中我們會發現大量的命名為a,b,c,d的函數和變量,對于這種情況,如果必須去分析js,那麼肯定是非常頭大的,但是在後面的課程中,我們會學習通過程式其控制浏覽器的方式操作網頁、擷取資料,這個方法會更加簡單。是以在這裡我們需要掌握js的分析過程即可。