網(wǎng)頁(yè)前端基礎(chǔ)
認(rèn)識(shí)爬蟲
常見的網(wǎng)上沖浪過(guò)程是怎樣的呢?
首先用戶輸入網(wǎng)址,瀏覽器向目標(biāo)網(wǎng)站的服務(wù)器發(fā)送請(qǐng)求,之后服務(wù)器響應(yīng)請(qǐng)求,接著返回相應(yīng)網(wǎng)頁(yè)的數(shù)據(jù)。
而網(wǎng)絡(luò)爬蟲(網(wǎng)絡(luò)機(jī)器人/蜘蛛),是一個(gè)模擬瀏覽器向目標(biāo)網(wǎng)站發(fā)起請(qǐng)求從而自動(dòng)下載網(wǎng)頁(yè)數(shù)據(jù)的計(jì)算機(jī)程序或自動(dòng)化腳本。像一只蜘蛛在互聯(lián)網(wǎng)上沿著URL的絲線爬行,下載每一個(gè)URL所指向的網(wǎng)頁(yè),并分析提取網(wǎng)頁(yè)內(nèi)容。
爬蟲的應(yīng)用場(chǎng)景主要有:搜索引擎、輿情分析(數(shù)據(jù)挖掘)、數(shù)據(jù)聚合、價(jià)格監(jiān)測(cè)&運(yùn)營(yíng)助手、其它
爬蟲亦需要注意合法性:個(gè)人隱私數(shù)據(jù)不能爬取、明確禁止的數(shù)據(jù)不能爬取、謹(jǐn)慎將爬取到的數(shù)據(jù)用于商業(yè)用途、遵循robot.txt爬取協(xié)議
認(rèn)識(shí)反爬蟲
概念:被爬網(wǎng)站采取措施禁止爬蟲對(duì)其訪問(wèn)
為什么會(huì)反爬?
1.爬蟲訪問(wèn)頻率過(guò)高,給目標(biāo)網(wǎng)站/應(yīng)用服務(wù)器帶來(lái)巨大訪問(wèn)壓力
2.爬蟲的訪問(wèn)記錄毫無(wú)價(jià)值,甚至?xí)_亂網(wǎng)絡(luò)運(yùn)營(yíng)者的正常工作
3.爬蟲會(huì)帶來(lái)數(shù)據(jù)安全問(wèn)題
認(rèn)識(shí)網(wǎng)絡(luò)信息傳輸過(guò)程
數(shù)據(jù)在網(wǎng)絡(luò)世界中的傳播形式如下圖所示:
? ??

????計(jì)算機(jī)或通信系統(tǒng)間互聯(lián)的標(biāo)準(zhǔn)體系,是抽象模型,并非按硬件層級(jí)劃分的。TCP/IP模型使用更為廣泛。TCP/IP是一系列協(xié)議的集合,其核心協(xié)議是TCP和IP,各層有專門協(xié)議,各主機(jī)相應(yīng)協(xié)議進(jìn)行通信。
網(wǎng)絡(luò)傳輸過(guò)程:
發(fā)方從最高層開始向下對(duì)數(shù)據(jù)逐層封裝/打包,最終形成比特流,再通過(guò)網(wǎng)絡(luò)接口層向收方傳遞。
比特流穿越復(fù)雜的中間信道。
收方對(duì)收到的比特流從最底層開始向上逐層封裝/解包,最終還原出原始信息。

4.認(rèn)識(shí)HTTP
HTTP的全稱為HyperText Transfer Protocol(超文本傳輸協(xié)議)
爬蟲是利用python程序模擬瀏覽器向web服務(wù)器發(fā)送http請(qǐng)求,以獲取服務(wù)器的目標(biāo)網(wǎng)頁(yè)文件。
http包含數(shù)據(jù)頭和數(shù)據(jù)體兩個(gè)部分。

在日常生活中我們?yōu)g覽網(wǎng)頁(yè)的時(shí)候也可以注意到,網(wǎng)址其實(shí)都帶有http的前綴。以bilibili的網(wǎng)址為例子:


HTTP頭部類型按用途可分為:通用頭,請(qǐng)求頭,響應(yīng)頭,實(shí)體頭
通用頭:既適用于客戶端的請(qǐng)求頭,也適用于服務(wù)端的響應(yīng)頭。與HTTP消息體內(nèi)最終傳輸?shù)臄?shù)據(jù)是無(wú)關(guān)的,只適用于要發(fā)送的消息。
請(qǐng)求頭:提供更為精確的描述信息,其對(duì)象為所請(qǐng)求的資源或請(qǐng)求本身。
響應(yīng)頭:為響應(yīng)消息提供了更多信息。例如,關(guān)于資源位置的描述Location字段,以及關(guān)于服務(wù)器本身的描述使用Server字段等。
實(shí)體頭:提供了關(guān)于消息體的描述。如消息體的長(zhǎng)度Content-Length,消息體的MIME類型Content-Type等。
通用頭:

請(qǐng)求頭:

響應(yīng)頭:

實(shí)體頭:

常用請(qǐng)求方法:

http狀態(tài)碼種類:

請(qǐng)求頭常用字段:

響應(yīng)頭:
響應(yīng)狀態(tài):有多種響應(yīng)狀態(tài),如200代表成功、301跳轉(zhuǎn)、404找不到頁(yè)面、502服務(wù)器錯(cuò)誤
響應(yīng)頭:如內(nèi)容類型、內(nèi)容長(zhǎng)度、服務(wù)器信息、設(shè)置Cookie等等。
響應(yīng)體:最主要的部分,包含了請(qǐng)求資源的內(nèi)容,如網(wǎng)頁(yè)HTML、圖片二進(jìn)制數(shù)據(jù)等。
HTTP是一種無(wú)狀態(tài)的協(xié)議,客戶端與服務(wù)器建立連接并傳輸數(shù)據(jù),在數(shù)據(jù)傳輸完成后,本次的連接將會(huì)關(guān)閉,并不會(huì)留存相關(guān)記錄。
服務(wù)器無(wú)法依據(jù)連接來(lái)跟蹤會(huì)話,也無(wú)法從連接上知曉用戶的歷史操作。這嚴(yán)重阻礙了基于Web應(yīng)用程序的交互,也影響用戶的交互體驗(yàn)。
某些網(wǎng)站需要用戶登錄才進(jìn)一步操作,用戶在輸入賬號(hào)密碼登錄后,才能瀏覽頁(yè)面。對(duì)于服務(wù)器而言,由于HTTP的無(wú)狀態(tài)性,服務(wù)器并不知道用戶有沒有登錄過(guò),當(dāng)用戶退出當(dāng)前頁(yè)面訪問(wèn)其他頁(yè)面時(shí),又需重新再次輸入賬號(hào)及密碼。
為了解決http的無(wú)狀態(tài)性,所以出現(xiàn)了Cookie機(jī)制,Cookie是一段用作用戶身份識(shí)別和操作記錄的文本信息。
Cookie機(jī)制
1.客戶端請(qǐng)求服務(wù)器時(shí),若服務(wù)器需要記錄用戶狀態(tài),就在響應(yīng)用戶請(qǐng)求時(shí)發(fā)送一段Cookie信息。
2.客戶端瀏覽器會(huì)保存該Cookie信息,當(dāng)用戶再次訪問(wèn)該網(wǎng)站時(shí),瀏覽器會(huì)把Cookie做為請(qǐng)求信息的一部分提交給服務(wù)器。
3.服務(wù)器對(duì)Cookie進(jìn)行驗(yàn)證,以此來(lái)判斷用戶狀態(tài),當(dāng)且僅當(dāng)該Cookie合法且未過(guò)期時(shí),用戶才可直接登錄網(wǎng)站。

客戶端與服務(wù)器間的Cookie實(shí)現(xiàn)過(guò)程的具體步驟如下:
1.客戶端請(qǐng)求服務(wù)器:客戶端請(qǐng)求網(wǎng)站頁(yè)面
2.服務(wù)器響應(yīng)請(qǐng)求:Cookie是一種字符串,為key=value形式,服務(wù)器需要記錄這個(gè)客戶端請(qǐng)求的狀態(tài),在響應(yīng)頭中增加一個(gè)Set-Cookie字段。
3.客戶端再次請(qǐng)求服務(wù)器:客戶端會(huì)對(duì)服務(wù)器響應(yīng)的Set-Cookie頭信息進(jìn)行存儲(chǔ)。當(dāng)再次請(qǐng)求時(shí),將會(huì)在請(qǐng)求頭中包含服務(wù)器響應(yīng)的Cookie信息。
Cookie的存儲(chǔ)方式
Cookie由用戶客戶端瀏覽器進(jìn)行保存,按其存儲(chǔ)位置可分為內(nèi)存式存儲(chǔ)和硬盤式存儲(chǔ)。
1.內(nèi)存式存儲(chǔ)將Cookie保存在內(nèi)存中,在瀏覽器關(guān)閉后就會(huì)消失,由于其存儲(chǔ)時(shí)間較短,因此也被稱為非持久Cookie或會(huì)話Cookie。
2.硬盤式存儲(chǔ)將Cookie保存在硬盤中,其不會(huì)隨瀏覽器的關(guān)閉而消失,除非用戶手工清理或到了過(guò)期時(shí)間。由于硬盤式Cookie存儲(chǔ)時(shí)間是長(zhǎng)期的,因此也被稱為持久Cookie。
以我使用賬號(hào)所登錄的B站為例子:
打開網(wǎng)頁(yè)的開發(fā)者工具,并點(diǎn)擊Console,輸入
javascript:alert(document.cookie)

得到Cookie如下:

(本文完)