一、cookie和sesson
1、什麼是cookie和session
cookie:
cookie是網站用來辨別用戶身份,進行會話跟蹤,存儲在本地終端上的數據。
session:
session(會話)本來含義是指有始有終的一系列動作和消息。在web中,session主要用來在伺服器端存儲特定用戶對象會話所需要的信息。
2、cookie和session產生的原因
http協議是一個無狀態協議,在特定操作的時候,需要保存信息,進而產生了cookie和session。
3、cookie原理
cookie由伺服器產生,瀏覽器第一次請求,伺服器發送給客戶端進而保存,瀏覽器在繼續訪問時,就會在請求頭的cookie欄位上附帶cookie信息,這樣伺服器就可以識別是誰在訪問了,但cookie也存在一定的缺陷,cookie數據保存在本地,不安全,容易被篡改。
cookie大小受限,本身最大4kb
cookie雖然在一定程度上解決了保持狀態的需求,但是我們希望有一種新的技術可以克服cookie的缺陷,這種技術就是session。
4、session原理
session數據保存在伺服器,解決了安全問題。
由於伺服器上有session,但是客戶端的請求發送過來,伺服器分不清哪個是session_a,哪個是session_b,這時cookie就作為橋梁出現了,在cookie中存在sessionid欄位,可以用來表示這個請求對應伺服器中的session。
禁用cookie,一般情況下session也無法使用。在特殊情況下,可以使用url重寫技術來使用session。(url重寫技術:將sessionid拼接到url裡)
二、代理設置
在我們爬取網絡上的數據時,經常會遇到一些網站採取了防爬取技術,或是因為自己採集網站信息的強度和採集速度太大,給對方伺服器帶去了更多的壓力。在我們爬取數據時,如果一直使用同一個ip,很可能就會被進位訪問頁面,所以,做網絡爬蟲都躲不過去ip問題。
1、代理基本原理
代理,實際上就是代理伺服器(proxy server),它的功能是代理網絡用戶去取得網絡信息。形象地說,它是網絡信息的中轉站。在我們正常請求一個網站時,是發送了請求給web伺服器,web伺服器把響應傳回給我們。如果設置了代理伺服器,實際上就是在本機和伺服器之間搭建了一個橋,此時本機不是直接向 web伺服器發起請求,而是向代理伺服器發出請求,請求會發送給代理伺服器,然後由代理伺服器在發送給 web伺服器,接著由代理伺服器再把 web 伺服器返回的響應轉發給本機。這樣我們同樣可以正常訪問網頁,但這個過程中web伺服器識別出的真是ip就不在是我們自己的ip了,就成功實現了ip偽裝。
2.代理分類
1)、根據代理匿名程度:
①高度匿名代理(高匿):可以完整將ip編程代理伺服器的ip,對方追蹤不到真實的ip;
②普通匿名代理(普匿):對方可以追蹤到真實的ip;
③透明代理:如果透明代理加密,就變成匿名代理。
2)、根據協議分類:
①HTTP代理:主要用於訪問頁面;
②SSL代理:用於訪問安全性高的網站,ssl安全套接層;
③Talent代理:主要用於遠程控制;
④Pop3/SMTP:主要用於郵件發送。
三、頁面響應類型
1、數據的結構化分類:
1)、結構化數據
可以用統一的結構加以表示的數據。可以使用關係型資料庫表示和存儲,表現為二維形式的數據,一般特點是:數據以行為單位,一行數據表示一個實體的信息,每一行數據的屬性是相同的。
2)、半結構化數據
結構化數據的一種形式,並不符合關係型資料庫或其它數據表的形式關聯起來的數據模型結構,但包含相關標記,用來分隔語義元素以及對記錄和欄位進行分層。因此它也被稱為自描述的結構。常見的半結構數據有:HTML,XML,json等,實際上是以樹或者圖的結構來存儲的。
3)、非結構化數據
就是沒有固定的結構,各種圖片,文檔,視頻或音頻都屬於非結構化數據。
2、json數據
Json(JavaScript Object Notation,JS對象標記),是一種輕量級的數據交換格式。json是js對象的字符串表達式,他使用文本形式表示一個js對象的信息,本質是一個字符串。
Js 中對象和數組是比較特殊並且常用的兩種類型:
1).對象表示為鍵值對
2).數據用逗號分隔
3).花括號保存對象
4).方括號保存數組。
3、處理json數據的兩種方式
1)、使用json模塊:
①將json字符串類型轉換成Python類型
json.loads(json的字符串格式)
②讀取文件內容
json.load(json的字符串格式)
③將Python類型轉換成json字符串類型
json.dumps(python類型)
④將Python類型轉換成就送字符串類型,保存到文件中
json.dump(python類型)
2)、requests方法:
如果使用requests模塊來獲取數據,也可以使用response.json()直接獲取json數據所對應的Python數據類型的數據。