我們學習知識就像蓋房子一樣,沒有良好的地基,房子經不起風吹雨打。而如果房子的地基搭建的足夠牢固,即使臺風來了都是高高的聳立在那里。我們沒有上來就講爬蟲怎么用,而是講了一些基礎的內容。這些內容大家都掌握了,后面我們學習實操爬蟲就會很順利,很清晰了。
HTTP協議
提到爬蟲我們不得不提起HTT協議,那什么是HTTP協議呢?
HTTP協議(超文本傳輸協議HyperText Transfer Protocol),它是基于TCP協議的應用層傳輸協議,簡單來說就是客戶端和服務端進行數據傳輸的一種規則。
• 超文本:是指超過文本,不僅限于文本;還包括圖片、音頻、視頻等文件
• 傳輸協議:是指使用共用約定的固定格式來傳遞轉換成字符串的超文本內容
• 默認端口號:80
并且HTTP是一種無狀態(stateless) 協議, HTTP協議本身不會對發送過的請求和相應的通信狀態進行持久化處理。這樣做的目的是為了保持HTTP協議的簡單性,從而能夠快速處理大量的事務, 提高效率。
有時我們還會使用到https協議,其實他是HTTP + SSL(安全套接字層),即帶有安全套接字層的超本文傳輸協,默認端口號:443
• SSL對傳輸的內容(超文本,也就是請求體或響應體)進行加密
請求
HTTP協議中每次請求都會攜帶下方的內容,比如有請求的方法、請求的路徑、協議的版本等我們稱作請求行
還有符合字段名:值的這個方式的,我們稱作請求頭。
最后一部分是請求體。
大家來看一下,瀏覽器的開發者工具Network中的請求情況:
我們可以發現瀏覽器在發出請求的時候也是攜帶了請求行、請求頭等內容。
爬蟲中特別關注的請求頭
無論是瀏覽器還是爬蟲,在發出請求的時候要遵守HTTP協議,遵守HTTP協議就要攜帶請求頭。
瀏覽器的請求頭有哪些呢?同樣在Network模式點擊一個鏈接查看:
這么多請求頭發出請求的時候都要加嗎?不是的,因為每個網站的請求頭也是不一樣的,也不是統一的。所以爬蟲特別關注以下幾個請求頭字段:
• Content-Type
• Host (主機和端口號)
• Connection (鏈接類型)
• Upgrade-Insecure-Requests (升級為HTTPS請求)
• User-Agent (瀏覽器名稱)
• Referer (頁面跳轉處)
• Cookie (Cookie)
• Authorization(用于表示HTTP協議中需要認證資源的認證信息,如前邊web課程中用于jwt認證)
加粗的請求頭為常用請求頭,在服務器被用來進行爬蟲識別的頻率最高,相較于其余的請求頭更為重要,但是這里需要注意的是并不意味這其余的不重要,因為有的網站的運維或者開發人員可能劍走偏鋒,會使用一些比較不常見的請求頭來進行爬蟲的甄別
響應
有請求再加上響應才是一個完整的HTTP協議過程。那返回的響應內容格式又是什么呢?
所以每一次響應都會包含上圖中的內容,狀態碼、協議版本、響應頭、響應實體等。
同樣為了我們更加直觀的來看響應我們還是通過瀏覽器的Network來看。可以看到有狀態碼、遠程主機IP、響應頭等內容
還有一個主要內容是沒有看到的,那就是響應體,需要點擊一下Response,就會發現下面發生了變化,你所看到的就是響應體的內容。
所以瀏覽器在發出請求的時候,運行過程是:
http請求的過程
我們無論訪問任何網站都是在瀏覽器的地址欄上輸入域名的,比如:http://www.baidu.com. 因為域名好記啊!我們從來不會記的百度的IP地址。但是識別的過程有DNS域名解析服務器完成了,它能夠根據你輸入的域名找到匹配的IP地址,然后將IP地址告訴你。
瀏覽器在拿到域名對應的ip后,開始發起請求,并獲取響應
在返回的響應內容(html)中,會帶有css、js、圖片等url地址,以及ajax代碼,瀏覽器按照響應內容中的順序依次發送其他的請求,并獲取相應的響應
瀏覽器每獲取一個響應就對展示出的結果進行添加(加載),js,css等內容會修改頁面的內容,js也可以重新發送請求,獲取響應
從獲取第一個響應并在瀏覽器中展示,直到最終獲取全部響應,——這個過程叫做瀏覽器的渲染
那講了這么多,到底HTTP跟我們即將要講的爬蟲有什么關系呢?請看下圖:
http作用
這個是爬蟲的步驟,而HTTP協議則是這個步驟中的一部分而且是最重要的一部分,即發送請求獲取響應的那部分。
【說的明白些,就是【請求和響應】這段其實就是瀏覽器要干的活,我們通過寫程序假裝是瀏覽器在訪問。】!!!上圖紅色框起來的那部分就是假裝瀏覽器在做事情
下一次爬蟲我們給大家介紹正則表達式,并且介紹正則表達式在爬蟲中的使用。
更多關于“Python培訓”的問題,歡迎咨詢千鋒教育在線名師。千鋒教育多年辦學,課程大綱緊跟企業需求,更科學更嚴謹,每年培養泛IT人才近2萬人。不論你是零基礎還是想提升,都可以找到適合的班型,千鋒教育隨時歡迎你來試聽。