和移动对接短信http协议和cmpp协议那个好_python网络爬虫之HTTP原理,爬虫的基本原理,Cookies和代理介绍...
一.HTTP基本原理
(一)URI和URL
URI的全稱為統(tǒng)一資源標志符,URL的全稱為統(tǒng)一資源定位符。用來指定一個資源的訪問方式,包括訪問協(xié)議,訪問路徑和資源名稱,從而找到需要的資源(網(wǎng)頁的內(nèi)容都是按照一定層次保存到網(wǎng)站系統(tǒng)的后臺數(shù)據(jù)庫或者文件夾內(nèi))。
其實URL是URI的子集,URI的另一個子類叫做URN,全稱為統(tǒng)一資源名稱。但在現(xiàn)在的互聯(lián)網(wǎng)中,URN用得非常少,我們可以把URI看作URL。
(二)超文本
網(wǎng)頁源代碼由一些標簽構(gòu)成,瀏覽器解析了這些標簽后,就會形成我們平常看到的網(wǎng)頁,網(wǎng)頁的源代碼HTML就稱作為超文本。
(三)HTTP和HTTPS
URL的開頭有http或https,是訪問資源需要的協(xié)議類型。
HTTP的全稱為超文本傳輸協(xié)議,是用于從網(wǎng)絡傳輸超文本數(shù)據(jù)到本地瀏覽器的傳送協(xié)議。目前廣泛使用的是HTTP1.1版本。
而HTTPS是以安全為目標的HTTP通道,是HTTP的安全版,它的安全基礎是SSL,就是HTTP下加入SSL層。傳輸?shù)膬?nèi)容通過SSL加密,保證了數(shù)據(jù)傳輸?shù)陌踩6颐總€用HTTPS的url后面都有一個鎖頭標志,可以查看網(wǎng)站認證之后的真實信息,也可以通過CA(電子認證服務)下發(fā)的安全證書查詢。
在訪問谷歌的時候,對于一些不安全的未被加密的網(wǎng)址,會對其進行高亮顯示"此網(wǎng)站不安全"。
在訪問12306網(wǎng)站的時候,大家可能會發(fā)現(xiàn),也是會被提示不安全,因為這個網(wǎng)站的證書是鐵道部自行頒發(fā)的,并沒有被ca機構(gòu)信任。但是他仍舊是SSL認證的,如果要爬取這樣的站點,就需要設置忽略證書選項。
(四)HTTP請求過程
我們在瀏覽器中輸入一個URL,回車后就會觀察到頁面內(nèi)容。其實就是我們用瀏覽器向網(wǎng)站所在的服務器發(fā)送了一個請求,網(wǎng)站的服務器接收到這個請求后進行處理和解析,然后再返回對應的響應,之后傳給瀏覽器,瀏覽器再對其進行解析,把網(wǎng)頁內(nèi)容呈現(xiàn)出來。
可以用網(wǎng)頁的審查元素打開開發(fā)者模式下的Network監(jiān)聽組件,里面可以得到訪問當前請求網(wǎng)頁時發(fā)生的所有網(wǎng)絡請求和響應,我們打開淘寶首頁查看一下:
其中各列的意義如下:
|列名| 含義 |
-------|-------
|Name|請求的名稱,一般是URL的最后一部分內(nèi)容|
| Status|響應的狀態(tài)碼 ,200表示正常。|
|Type| 請求的文檔類型,document表示一個HTML文檔|
|Initiator|請求源,用來標記請求是那個對象或進程發(fā)起的|
|Size|從服務器下載的文件和資源的大小,如果是從緩存中獲取數(shù)據(jù),這回顯示from cache|
|Time|發(fā)起請求到獲取響應所用的總時間|
|Waterfall|網(wǎng)絡請求的可視化瀑布流|
當我們點擊任意一個過程時,就會看到更詳細的內(nèi)容:
這里,General中,Request URL為請求的URL,Request Method為請求的方法,Status Code為響應的狀態(tài)碼。Remote Address為遠程服務器的地址和端口,Referrer Policy為Referrer辨別策略。
我們繼續(xù)向下看,可以看到,有Response Headers和Requests Headers,分別表示響應頭和請求頭,請求頭就是我們發(fā)送請求的信息,伴隨著General中的URL,請求方法,進行請求。瀏覽器接收到響應時,會解析響應內(nèi)容,進而呈現(xiàn)網(wǎng)頁內(nèi)容。
(五)請求
1.請求方法
常見有兩種,分別為GET和POST。GET請求可以加一些參數(shù),POST請求大多數(shù)在處理表單提交時發(fā)起。且POST請求的數(shù)據(jù)常以字典表單的形式發(fā)起,會出現(xiàn)在請求體中,不會出現(xiàn)在URL中。還有一些其他的請求方法,但不太常見,這里就不說明了。
POST請求更安全,數(shù)據(jù)不會直接包含在url中,會只包含在請求體中。且GET請求提交的數(shù)據(jù)最多只有1024個字節(jié)。
當?shù)卿洉r需要提交密碼,用GET方法就會直接暴露在url中,就會造成信息泄露,最好用POST方法。而且上傳文件的時候,由于文件內(nèi)容比較大,選擇POST方法比較好。
還有一些其他的不常見的方法,這里就不介紹了。
2.請求的網(wǎng)址
請求的網(wǎng)址URL,統(tǒng)一資源定位符,定位我們想請求的資源。
3.請求頭
請求的信息,用于告訴服務器我們的請求,讓服務器返回我們需要的信息。常見的有Cookie,Referer,Host,User-Agent。大家可以查看維基百科的說明:維基百科請求頭說明
常用的幾個的含義如下:
| 常用請求頭信息 |含義 |
|--|--|
|Accept|請求報文域,指定客戶端可以接受的類型信息|
|Accept-Language|指定客戶端可以接受的語言類型|
|Accept-Encoding|指定客戶端可以接受的內(nèi)容編碼|
| Cookie|服務器通過 (Set- Cookie )發(fā)送的一個 超文本傳輸協(xié)議,是網(wǎng)站用于辨別用戶進行會話跟蹤而存儲在客戶端本地的數(shù)據(jù) |
| Referer| 表示瀏覽器所訪問的前一個頁面,正是那個頁面上的某個鏈接將瀏覽器帶到了當前所請求的這個頁面|
|Host|服務器的域名ip(用于虛擬主機 ),以及服務器所監(jiān)聽的傳輸控制協(xié)議端口號。|
|User-Agent|瀏覽器的瀏覽器身份標識字符串,包括客戶端的操作系統(tǒng),瀏覽器的版本等信息|
|Content-Type|互聯(lián)網(wǎng)媒體類型,表示具體請求中的媒體類型信息,如text/html表示HTML格式,image/gif表示GIF圖片,application/json代表JSON類型|
請求頭是請求的重要組成部分,要構(gòu)建好。
4.請求體
用于進行POST請求而設置的,是一個數(shù)據(jù)表單。在GET請求中為空。在請求頭中,Content-Type為請求體的多媒體類型。指定Content-Type為application/x-www-form-urlencoded,才會以表單數(shù)據(jù)的形式提交;設置為application/json會以JSON數(shù)據(jù)提交;或者是multipart/form-data以表單文件進行提交;text/xml以XML數(shù)據(jù)提交。
如果要提交表單,要說明Content-Type是哪種類型的數(shù)據(jù),否則會出錯。
(六)響應
1.響應狀態(tài)碼
服務器的響應狀態(tài),200表示正常,其他常見的有,403表示禁止訪問,404表示頁面未找到,500表示服務器內(nèi)部錯誤等。
2.響應頭
顯示了相應的一些基本信息。有需要時可以查詢。
3.響應體
就是響應的主體,請求網(wǎng)頁時時Html代碼,請求多媒體時,是二進制文件。可以用content輸出二進制文件,可以通過響應頭的Content-Type查看返回的數(shù)據(jù)類型是什么。
這里主要的響應體是網(wǎng)頁的源代碼以及JSON數(shù)據(jù)。
二.爬蟲的基本原理
爬蟲是獲取網(wǎng)頁并提取和保存信息的自動化程序。
(一)獲取網(wǎng)頁技術
用urllib,requests等類庫實現(xiàn)HTTP請求。獲取網(wǎng)頁源代碼或者json數(shù)據(jù)。
(二)提取信息
萬能方法正則表達式,但是正則比較復雜且容易出錯,其他方法有用Beautiful Soup,pyquery,lxml等提取網(wǎng)頁節(jié)點的屬性或文本值。
(三)保存數(shù)據(jù)
可以簡單保存為TXT文本,CSV文本或JSON文本,也可以保存到數(shù)據(jù)庫,如MySQL和MongoDB等,或者保存到遠程服務器,利用網(wǎng)絡編程與SFTP(安全文件傳送協(xié)議)進行操作。
(四)能爬的數(shù)據(jù)
網(wǎng)頁源碼,JSON格式的API接口數(shù)據(jù),二進制多媒體數(shù)據(jù),基本上網(wǎng)上的信息在robot協(xié)議下的數(shù)據(jù)都能爬,還有移動互聯(lián)網(wǎng)下APP的數(shù)據(jù)。
這里要注意一定要遵守網(wǎng)絡爬蟲robot協(xié)議,否則就是盜取別人的數(shù)據(jù)。
(五)JavaScript動態(tài)渲染頁面的數(shù)據(jù)
現(xiàn)在當我們爬取網(wǎng)頁源碼時,會發(fā)現(xiàn)與我們用審查元素查看的頁面不同。這是因為現(xiàn)在越來越多的網(wǎng)頁采用Ajax,前端模塊化工具,CSS與JS等動態(tài)構(gòu)建網(wǎng)頁,我們得到的只是一個空殼。當我們用urlllib與requests等庫請求頁面時,只是得到網(wǎng)頁的Html源碼,因此這時候就會用到動態(tài)抓取技術,來進行動態(tài)提取網(wǎng)頁內(nèi)容。
我們可以分析其后臺Ajax接口,或者使用Selenium,Splash等第三方登臺抓取庫,或者自己寫一個庫(如果學成高手的話)來模擬JS渲染。
三.會話和Cookies
在很多情況下,我們都可以發(fā)現(xiàn),好多網(wǎng)頁需要登錄后才可以訪問,有的可以在訪問某個網(wǎng)站的很多頁面時,都可以不用重新登錄,還會很長時間保存,有的卻需要每次關閉網(wǎng)頁后,下次重新輸入登錄信息。這種技術就涉及到會話(Session)和Cookies了。
(一)無狀態(tài)HTTP
這個意思指的是HTTP協(xié)議對事務處理是沒有記憶功能的,每次我們發(fā)一個請求到獲得響應,服務器缺乏一個用戶記錄,而且等待下次我們再進行登錄時,又要重新傳入登錄信息。這不僅僅會浪費時間,還會浪費資源。
隨著互聯(lián)網(wǎng)技術的發(fā)展,出現(xiàn)了兩種用于保持HTTP連接狀態(tài)的技術,分別是會話和Cookies,會話在服務端,就是網(wǎng)站的服務器,用于保存用戶的會話信息,Cookies在客戶端,就會讓網(wǎng)頁在下次訪問時自動附帶上做為請求的一部分發(fā)送給服務器,服務器通過識別Cookies并鑒別出是哪個用戶,然后再判斷用戶是否是登錄狀態(tài),返回對應的響應。(二).會話
就是有始有終的一系列動作/消息。在網(wǎng)頁web中,會話對象用來存儲特定用戶會話所需的屬性及配置信息,這樣在訪問網(wǎng)頁時,這個會話保存的內(nèi)容不會消失。如果用戶還沒有會話,則服務器將自動創(chuàng)建一個會話對象。當會話過期或放棄后,服務端將停止該會話。
(三).Cookies
指某些網(wǎng)站為了辨別用戶身份,進行會話跟蹤而存儲在用戶本地終端上的數(shù)據(jù)。
可以在瀏覽器開發(fā)者工具的Application選項卡中的Storage查看cookies信息。由Max Age或Expires字段決定了過期的時間。基本上現(xiàn)在都是把Cookies保存在客戶端的硬盤上,當檢測到會話有很長時間沒有訪問時,才會刪除來節(jié)省內(nèi)存。
四.代理IP
有時候服務器會檢測某個代理IP在單位時間的請求次數(shù),如果過于頻繁,不像人類,就會拒絕服務,稱之為封IP。
代理說白了就是用別人的IP進行訪問,進行IP偽裝。
優(yōu)點:
(1)突破自身IP的訪問限制。
(2)訪問一些單位或團體的內(nèi)部資源。
(3)提高訪問速度。
(4)隱藏自身IP。
(一)使用網(wǎng)上的免費代理
這種方式是免費的,但是不太穩(wěn)定,還需要維護一個代理池。
(二)使用付費代理服務
付費的肯定比免費的要好一些。
(三)ADSL撥號
撥一次號換一次IP,穩(wěn)定性高。
最后,小編想說:我是一名python開發(fā)工程師,整理了一套最新的python系統(tǒng)學習教程,想要這些資
料的可以關注私信小編“01”即可,希望能對你有所幫助。
總結(jié)
以上是生活随笔為你收集整理的和移动对接短信http协议和cmpp协议那个好_python网络爬虫之HTTP原理,爬虫的基本原理,Cookies和代理介绍...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: stm32l0的停止模式怎么唤醒_手把手
- 下一篇: websocket python爬虫_p