http在链接中加入用户名_爬虫基础——HTTP基本原理
URI和URL
URI:統一資源標志符(全稱Uniform Resource Identifier )
URL:統一資源定位符(全稱Universal Resource Locator )
URL簡單來說就是網頁鏈接,比如下面這個百度的網址,就是一個URL
URI和URL是父與子的關系,URL是URI的子集
URI還有一個子集URN,URN是統一資源名稱,只命名資源不定位資源,互聯網中用的非常少
為了簡單記憶,一般網頁鏈接我們可以統稱為URL
超文本
超文本=網頁源代碼(HTML代碼)
我們看到的所有網頁,都是超文本解析而成的。
如何查看超文本
打開任意網頁→右鍵→檢查(審查元素)
HTTP和HTTPS
在URL的開頭會有http或https,比如知乎的網址中,開頭是https。
https://www.zhihu.com/無論是http還是https,它們都是一種協議類型。
HTTP的中文名叫作超文本傳輸協議
HTTP和HTTPS的區別是,HTTPS是HTTP的安全版,它傳輸的內容都是經過SSL加密的。
HTTPS的作用是建立一個信息安全通道來保證數據傳輸安全。凡是使用了HTTPS的網站,都可以通過點擊瀏覽器地址欄的鎖頭標志來查看網站認證后的真實信息。
目前越來越多的網站和App都已經向HTTPS方向發展
自2017年1月1日以后,蘋果公司強制要求所有的IOS App都必須使用HTTPS加密,否則無法在應用商店上架。谷歌從2017年1月開推出的Chrome56開始,對未進行HTTPS加密的網址鏈接亮出風險提示。
騰訊微信小程序的官方需求文檔要求后臺使用HTTPS請求進行網絡通信,不滿足條件的域名和協議無法請求。
HTTP請求過程
步驟:
【1】輸入URL
【2】瀏覽器向網站所在服務器發送請求
【3】網站服務器接收到請求后進行處理和解析
【4】將響應內容傳回給瀏覽器,包含頁面的源碼(超文本)
【5】瀏覽器對返回內容進行解析,然后呈現結果。
訪問示例
下面我們使用Chrome瀏覽器,訪問百度http://www.baidu.com,進行詳細說明。
首先,打開Chrome瀏覽器,右擊并選擇“檢查”選項,點擊Network選項卡
然后輸入百度的URL后回車,觀察這個過程發生了怎樣的網絡請求。
我們觀察第一個網絡請求:http://www.baidu.com。
各列含義如下:
- 第一列Name:請求的名稱,一般為URL的最后一部分
- 第二列Status:響應的狀態碼,200,代表響應正常
- 第三列Type:請求的文檔類型,document,代表我們請求的是一個HTML文檔。
- 第四列Initiator:請求源,用來標記請求是哪個對象或進程發起的。
- 第五列Size:從服務器下載的文件和請求的資源大小。
- 第六列Time:發起請求到獲取響應所用時間
- 第七列Waterfall:網絡請求的可視化瀑布流
點擊這個條目,查看詳細信息
General部分
Request URL:請求的URL
Request Method:請求方法
Status Code:響應狀態碼
Remote Address:遠程服務器的地址和端口
Referrer Policy:Referrer判別策略
Response Headers 和 Request Headers 分別代表響應頭和請求頭
Response Headers:響應頭就是響應的一部分,例如其中包含了服務器的類型、文檔類型、日期等信息,瀏覽器接受到響應后,會解析響應內容,進而呈現網頁內容。
Request Headers:請求頭里代表許多請求信息,例如瀏覽器標識、Cookies、Host等信息。服務器會根據請求頭內的信息判斷請求是否合法,進而作出對應響應。
請求
請求是由客戶端向服務端發出,可以分為4部分內容:
- 請求方法(Request Method)
- 請求的網址(Request URL)
- 請求頭(Request Headers)
- 請求體(Request Body)
1.請求方法
常見的的請求方法有兩種:GET和POST
GET:在瀏覽器中直接輸入URL并回車,便發起了一個GET請求,請求參數會直接包含到URL里。例如,在百度中搜索Pyhon,鏈接為 https://www.baidu.com/s?wd=Python,其中URL中包含了請求的參數信息,這里參數wd表示要搜尋的關鍵字。POST:對于一個登陸表單,輸入用戶名和密碼后,點擊“登陸”按鈕,這通常會發起一個POST請求,其數據通常以表單形式傳輸,而不會體現在URL中。(因為需要提交的用戶名和密碼包含了敏感信息,使用GET方式請求的話,密碼會暴露在URL里。)GET和POST請求的區別:
【1】GET請求的參數包含在URL里面,數據可以在URL中看到,而POST請求的URL不會包含這些數據,數據通常以表單形式傳輸,會包含在請求體中。
【2】GET請求提交的數據最多只有1024節,POST方式沒有限制。
我們平時接觸到的絕大部分請求都是GET和POST請求,另外還有其他的請求方法。
詳情可查詢( HTTP 請求方法 | 菜鳥教程)
2.請求的網址
即為統一資源定位符URL,它可以唯一確定我們想請求的資源。
3.請求頭
用來說明服務器要使用的附加信息,比較重要的信息有Cookie、Referer、User-Agent等。
常用的頭信息:
Accept:請求報頭域,用于指定客戶端可接受那些類型的信息。
Accept-Encoding:指定客戶端客可接受的內容編碼。
Accept-Language:指定客戶端可接受的語言類型。
Host:用于指定請求資源的主機IP和端口號,其內容為請求URL的原始服務器或網關位置。
Cookie:也常用復數形式Cookies,這是網站為了辨別用戶進行會話跟蹤而存儲在用戶本地的數據。它的主要功能是維持當前訪問會話。
舉例:你輸入了用戶名和密碼登陸了知乎,服務器會用會話保存登陸狀態信息,后面我們每次刷新或請求知乎的其他頁面時,我們始終會保持登陸狀態。
這就是Cookie的作用,Cookie的信息標識了我們對應服務器的會話,每次瀏覽器在請求知乎的頁面時,都會在請求頭中加上Cookie并發送給服務器,服務器通過Cookie識別出你,并查出當前是登陸狀態,所以返回結果就是登陸之后才能看到的網頁內容。
Referer:此內容用來標識這個請求是從哪個頁面發過來,服務器可以拿這個信息做來源統計、防盜鏈處理等。
User-Agent:簡稱UA,它是一個特殊字符串頭,可以使服務器識別客戶使用的操作系統及版本、瀏覽器及版本信息,相當于瀏覽器的身份證。在做爬蟲時加上這個信息,可以偽裝為瀏覽器,如果不加,很可能會被識別為爬蟲。
Content-Type:也叫互聯網媒體類型或者MIME類型,在HTTP下協議消息頭中,它用來標識具體請求中的媒體類型信息。
例如:text/html代表HTML格,image/gif代表GIF圖片,applocation/json代表JOSN類型。
4.請求體
一般承載的內容是POST請求中的表單數據,而對于GET請求,請求體則為空。
在爬蟲中,如果要構造POST請求,需要使用正確的Content-Type,并了解各種請求庫的各個參數設置時,使用的是哪種Content-Type,不然可能會導致POST提交后無法正常響應。
詳情可以查詢(HTTP content-type)
響應
響應由服務端放回給客戶端,可以分為三部分:
- 響應狀態碼(Response Status Code)
- 響應頭(Response Headers)
- 響應體(Response Body)
1.響應狀態碼
響應狀態碼表示服務器的響應狀態,例如200代表服務器正常響應,404代表頁面未找到,500代表服務器內部發生錯誤。
在爬蟲中,我們可以根據狀態碼來判斷服務器響應狀態,如狀態碼200,則證明成功返回數據,再進行進一步的處理,否則直接忽略。
常見狀態代碼及錯誤原因可以查詢(HTTP狀態碼 | 菜鳥教程)
2.響應頭
響應頭包含了服務器對請求的應答信息,如Content-Type、Server、Set-Cookie等。
常用的頭信息:
Date:標識響應產生的時間。
Last-Modified:指定資源的最后修改時間。
Expires:指定響應的過期時間,可以使代理服務器或瀏覽器將加載的內容更新到緩存中。如果再次訪問時,就可以直接從緩存中加載,降低服務器負載,縮短加載時間。
Content-Encoding:指定響應內容的編碼。
Server:包含服務器的信息,比如名稱、版本號等。
Content-Type:文檔類型,指定返回的數據類型是什么,如text/html代表返回HTML文檔,application/x-javascript則代表返回Javascript文件,image/jpeg則代表返回圖片。
Set-Cookie:設置Cookie,響應頭中的Set-Cookie告訴瀏覽器需要將此內容放在Cookie中,下次請求攜帶Cookie請求。
3.響應體
響應體是最重要的內容,響應的正文數據都在響應體中。
比如請求網頁時,它的響應體就是網頁的HTML代碼;請求一張圖片時,它的響應體就是圖片的二進制數據,我們做爬蟲請求網頁后,要解析的內容就是響應體。
在瀏覽器開發者工具中點擊Preview,就可以看到網頁的源代碼,也就是響應體的內容,它是解析的目標
在做爬蟲時,我們主要通過響應體得到網頁的源代碼、JSON數據等,然后從中做相應內容的提取。
本文總結參考《Python3網絡爬蟲開發實戰》
總結
以上是生活随笔為你收集整理的http在链接中加入用户名_爬虫基础——HTTP基本原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python booleans_Pyth
- 下一篇: 卡片的sak为不支持的类型_“师傅”两字