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