1. 爬蟲基礎(chǔ)

爬蟲基礎(chǔ)

HTTP基本原理

URI和URL

  • URI(Uniform Resource Identifer):統(tǒng)一資源標(biāo)識(shí)符
  • URL(Uniform Resource Locator):統(tǒng)一資源定位符
  • URL是URI的子集

超文本

  • 超文本是用超鏈接的方法,將各種不同空間的文字信息組織在一起的網(wǎng)狀文本

網(wǎng)絡(luò)協(xié)議類型:HTTP和HTTPS

  • HTTP(Hyper Text Transfer Protocol):超文本傳輸協(xié)議,是用于從網(wǎng)絡(luò)傳輸超文本數(shù)據(jù)到本地瀏覽器的傳送協(xié)議
  • HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer):以安全為目標(biāo)的HTTP通道

HTTPS的安全基礎(chǔ)是SSL府瞄,主要作用為建立一個(gè)信息安全通道保證數(shù)據(jù)傳輸?shù)陌踩痛_認(rèn)網(wǎng)站的真實(shí)性

  • 其他網(wǎng)絡(luò)協(xié)議還包括 ftp轧飞、sftp篮绿、smb 等

HTTP請(qǐng)求過程

  1. 向?yàn)g覽器輸入U(xiǎn)RL
  2. 瀏覽器向服務(wù)器發(fā)送請(qǐng)求
  3. 服務(wù)器對(duì)請(qǐng)求進(jìn)行處理和解析潘悼,返回對(duì)應(yīng)的響應(yīng)
  4. 瀏覽器對(duì)服務(wù)器返回的響應(yīng)進(jìn)行解析喉悴,呈現(xiàn)頁面
  • 瀏覽器開發(fā)者工具

請(qǐng)求

請(qǐng)求由客戶端向服務(wù)端發(fā)出祸挪,分為請(qǐng)求方法(Requests Method)、請(qǐng)求地址(Requests URL)原环、請(qǐng)求頭(Requests Head)和請(qǐng)求體(Requests Body)挠唆。

請(qǐng)求方法

方法 描述
GET 請(qǐng)求頁面,并返回頁面內(nèi)容
HEAD 類似于GET請(qǐng)求嘱吗,區(qū)別在于其返回的響應(yīng)中沒有具體內(nèi)容玄组,用于獲取報(bào)頭
POST 大多用于提交表單或上傳文件,數(shù)據(jù)包含在請(qǐng)求體中
PUT 從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定文檔中的內(nèi)容
DELETE 請(qǐng)求服務(wù)器刪除指定的頁面
CONNECT 把服務(wù)器當(dāng)作跳板谒麦,讓服務(wù)器代替客戶端訪問其他網(wǎng)頁
OPTIONS 允許客戶端查看服務(wù)器的性能
TRACE 回顯服務(wù)器收到的請(qǐng)求俄讹,主要用于測(cè)試或診斷
  • 常見的請(qǐng)求方法有GET和POST兩種
  • GET請(qǐng)求中的參數(shù)包含在URL內(nèi),數(shù)據(jù)可通過URL看到绕德;POST請(qǐng)求的參數(shù)包含在請(qǐng)求頭中患膛,不會(huì)在URL內(nèi)體現(xiàn)
  • GET請(qǐng)求提交的數(shù)據(jù)最多只有1024字節(jié),而POST方式?jīng)]有限制

請(qǐng)求地址

  • 請(qǐng)求的地址耻蛇,即統(tǒng)一資源定位符URL

請(qǐng)求頭

請(qǐng)求頭踪蹬,用于說明服務(wù)器要使用的附加信息

  • Accept:請(qǐng)求報(bào)頭域驹溃,用于指定客戶端可接受哪些信息
  • Accept-Language:指定客戶端可接受的語言類型
  • Accept-Encoding:指定客戶端可接受的內(nèi)容編碼
  • Host:用于指定請(qǐng)求資源的主機(jī)IP和端口號(hào),其內(nèi)容為請(qǐng)求URL的原始服務(wù)或網(wǎng)關(guān)的位置
  • Coocies:網(wǎng)站為了辨別用戶進(jìn)行會(huì)話跟蹤而儲(chǔ)存在用戶本地的數(shù)據(jù)延曙,主要功能是維持當(dāng)前會(huì)話
  • Referer:標(biāo)識(shí)請(qǐng)求來源頁面
  • User-Agent:簡(jiǎn)稱UA,可使服務(wù)器識(shí)別客戶使用的操作系統(tǒng)及版本亡哄、瀏覽器及版本信息(爬蟲可利用此信息偽裝瀏覽器)
  • Content-Type:也叫互聯(lián)網(wǎng)媒體類型(Internet Media Type)或者M(jìn)IME類型(Mime-Type)枝缔,在HTTP協(xié)議消息頭中表示具體請(qǐng)求中的媒體類型信息(例如text/html代表HTML格式more

請(qǐng)求體

  • GET請(qǐng)求的請(qǐng)求體為空
  • POST請(qǐng)求的請(qǐng)求體一般承載的內(nèi)容是請(qǐng)求中的表單數(shù)據(jù)
Content-Type POST提交數(shù)據(jù)的方式
application/x-www-form-urlencoded 表單數(shù)據(jù)
multipart/form-data 表單文件上傳
application/json 序列化JSON數(shù)據(jù)
text/xml XML數(shù)據(jù)

響應(yīng)

響應(yīng)由服務(wù)端返回給客戶端,分為響應(yīng)狀態(tài)碼(Response Status Code)蚊惯、響應(yīng)頭(Response Headers)和響應(yīng)體(Response Body)愿卸。

響應(yīng)狀態(tài)碼

響應(yīng)狀態(tài)碼表示服務(wù)器的響應(yīng)狀態(tài)

狀態(tài)碼 說明 詳情
100 繼續(xù) 請(qǐng)求者應(yīng)當(dāng)繼續(xù)提出請(qǐng)求。服務(wù)器已收到請(qǐng)求的一部分截型,正在等待其余部分
101 切換協(xié)議 請(qǐng)求者已要求服務(wù)器切換協(xié)議趴荸,服務(wù)器已確認(rèn)并準(zhǔn)備切換
200 成功 服務(wù)器已成功處理了請(qǐng)求
201 已創(chuàng)建 請(qǐng)求成功并且服務(wù)器創(chuàng)建了新的資源
202 已接受 服務(wù)器已接受請(qǐng)求,但尚未處理
203 非授權(quán)信息 服務(wù)器已成功處理了請(qǐng)求宦焦,但返回的信息可能來自另一個(gè)源
204 無內(nèi)容 服務(wù)器成功處理了請(qǐng)求发钝,但未返回任何內(nèi)容
205 重置內(nèi)容 服務(wù)器成功處理了請(qǐng)求,內(nèi)容被重置
206 部分內(nèi)容 服務(wù)器成功處理了部分請(qǐng)求
300 多種選擇 針對(duì)請(qǐng)求波闹,服務(wù)器可進(jìn)行多種操作
301 永久移動(dòng) 請(qǐng)求的網(wǎng)址已永久移動(dòng)到新位置酝豪,即永久重定向
302 臨時(shí)移動(dòng) 請(qǐng)求的網(wǎng)頁暫時(shí)跳轉(zhuǎn)到其他頁面,即暫時(shí)重定向
303 查看其他位置 如果原來的請(qǐng)求是POST精堕,重定向目標(biāo)文檔應(yīng)該通過GET提取
304 未修改 此次請(qǐng)求返回的網(wǎng)頁未修改孵淘,繼續(xù)使用上次的資源
305 使用代理 請(qǐng)求者應(yīng)該使用代理訪問該網(wǎng)頁
307 臨時(shí)重定向 請(qǐng)求的資源臨時(shí)從其他位置相應(yīng)
400 錯(cuò)誤請(qǐng)求 服務(wù)器無法解析該請(qǐng)求
401 未授權(quán) 請(qǐng)求沒有進(jìn)行身份驗(yàn)證或身份驗(yàn)證未通過
403 禁止訪問 服務(wù)器拒絕此請(qǐng)求
404 未找到 服務(wù)器找不到請(qǐng)求網(wǎng)頁
405 方法禁用 服務(wù)器禁用了請(qǐng)求中指定的方法
406 不接受 無法使用請(qǐng)求的內(nèi)容響應(yīng)請(qǐng)求的網(wǎng)頁
407 需要代理授權(quán) 請(qǐng)求者需要使用代理授權(quán)
408 請(qǐng)求超時(shí) 服務(wù)器請(qǐng)求超時(shí)
409 沖突 服務(wù)器在完成請(qǐng)求時(shí)發(fā)生沖突
410 已刪除 請(qǐng)求的資源已永久刪除
411 需要有效長(zhǎng)度 服務(wù)器不接受不含有效內(nèi)容長(zhǎng)度標(biāo)頭字段的請(qǐng)求
412 未滿足前提條件 服務(wù)器未滿足請(qǐng)求者在請(qǐng)求中設(shè)置的其中一個(gè)前提條件
413 請(qǐng)求實(shí)體過大 請(qǐng)求實(shí)體過大,超出服務(wù)器的處理能力
414 請(qǐng)求URL過長(zhǎng) 請(qǐng)求網(wǎng)址過長(zhǎng)歹篓,服務(wù)器無法處理
415 不支持類型 請(qǐng)求格式不被請(qǐng)求頁面支持
416 請(qǐng)求范圍不符 頁面無法提供請(qǐng)求的范圍
417 未滿足期望值 服務(wù)器未滿足期望請(qǐng)求標(biāo)頭字段的要求
500 服務(wù)器內(nèi)部錯(cuò)誤 服務(wù)器遇到錯(cuò)誤瘫证,無法完成請(qǐng)求
501 未實(shí)現(xiàn) 服務(wù)器不具備完成請(qǐng)求的功能
502 錯(cuò)誤網(wǎng)關(guān) 服務(wù)器作為網(wǎng)關(guān)或代理,從上游服務(wù)器收到無效響應(yīng)
503 服務(wù)不可用 服務(wù)器目前無法使用
504 網(wǎng)關(guān)超時(shí) 服務(wù)器作為網(wǎng)關(guān)或代理庄撮,沒有及時(shí)從上游服務(wù)器收到請(qǐng)求
505 HTTP版本不支持 服務(wù)器不支持請(qǐng)求中所用的HTTP協(xié)議版本

響應(yīng)頭

響應(yīng)頭包含了服務(wù)器對(duì)請(qǐng)求的應(yīng)答信息

  • Date:標(biāo)識(shí)響應(yīng)產(chǎn)生的時(shí)間
  • Last-Modified:指定資源的最后修改時(shí)間
  • Content-Ecoding:指定響應(yīng)內(nèi)容的編碼
  • Server:包括服務(wù)器的信息背捌,如名稱、版本號(hào)等
  • Content-Type:文檔類型
  • Set-Cookie:設(shè)置Cookies洞斯。響應(yīng)頭中的Set-Cookie告訴瀏覽器需要將此內(nèi)容放在Cookies中载萌,下次請(qǐng)求攜帶Cookies請(qǐng)求
  • Expires:指定響應(yīng)的過期時(shí)間,可以使代理服務(wù)器或?yàn)g覽器將加載的內(nèi)容更新到緩存中

響應(yīng)體

響應(yīng)的正文數(shù)據(jù)在響應(yīng)體中

  • 瀏覽器開發(fā)者工具“preview”中可預(yù)覽網(wǎng)頁源代碼巡扇,即響應(yīng)體的內(nèi)容扭仁。這也是爬蟲解析的目標(biāo)

網(wǎng)頁基礎(chǔ)

網(wǎng)頁的組成

網(wǎng)頁可分為三大部分:HTML、CSS和JavaScript厅翔,HTML定義網(wǎng)頁的內(nèi)容結(jié)構(gòu)乖坠、CSS描述網(wǎng)頁的布局、JavaScript定義了網(wǎng)頁的行為

HTML

  • HTML(Hyper Text Markup Language)即超文本標(biāo)記語言
  • 不同的元素通過不同的標(biāo)簽標(biāo)示刀闷,這些標(biāo)簽定義的節(jié)點(diǎn)元素相互嵌套和組合形成了復(fù)雜的層次關(guān)系熊泵,形成了網(wǎng)頁的架構(gòu)

CSS

  • CSS(Cascading Style Sheets)即層疊樣式表仰迁,是目前惟一的網(wǎng)頁頁面排版樣式標(biāo)準(zhǔn),能夠?qū)W(wǎng)頁中元素位置的排版進(jìn)行像素級(jí)精確控制

JavaScript

  • JavaScript簡(jiǎn)稱JS,是一種腳本語言顽分,用來給HTML網(wǎng)頁增加動(dòng)態(tài)功能

網(wǎng)頁的結(jié)構(gòu)

  • 一個(gè)網(wǎng)頁的標(biāo)準(zhǔn)形式是html標(biāo)簽內(nèi)嵌套head和body標(biāo)簽徐许,head標(biāo)簽內(nèi)定義網(wǎng)頁的配置和引用,body標(biāo)簽定義網(wǎng)頁的正文

節(jié)點(diǎn)樹

在HTML中卒蘸,所有標(biāo)簽定義的內(nèi)容都是節(jié)點(diǎn)雌隅,它們構(gòu)成了一個(gè)HTML DOM樹

  • DOM(Document Object Model)即文檔對(duì)象模型,是W3C的標(biāo)準(zhǔn)缸沃,它定義了訪問HTML和XML文檔的標(biāo)準(zhǔn)
  • 文檔對(duì)象模型是中立于平臺(tái)和語言的接口恰起,它允許程序和腳本動(dòng)態(tài)地訪問和更新文檔的內(nèi)容、結(jié)構(gòu)和樣式

W3C DOM標(biāo)準(zhǔn)被分為3個(gè)不同的部分

  1. 核心DOM:針對(duì)任何結(jié)構(gòu)化文檔的標(biāo)準(zhǔn)模型
  2. XML DOM:針對(duì)XML文檔的標(biāo)準(zhǔn)模型
  3. HTML DOM:針對(duì)HTML文檔的標(biāo)準(zhǔn)模型

根據(jù)W3C的HTML DOM標(biāo)準(zhǔn)趾牧,HTML文檔中的所有內(nèi)容都是節(jié)點(diǎn)

  • 整個(gè)文檔是一個(gè)文檔節(jié)點(diǎn)
  • 每個(gè)HTML元素是元素節(jié)點(diǎn)
  • HTML元素內(nèi)的文本是文本節(jié)點(diǎn)
  • 每個(gè)HTML屬性是屬性節(jié)點(diǎn)
  • 注釋是注釋節(jié)點(diǎn)

HTML DOM將HTML文檔視為樹結(jié)構(gòu)检盼,這種結(jié)構(gòu)被稱為節(jié)點(diǎn)樹

  • 節(jié)點(diǎn)樹中的節(jié)點(diǎn)彼此擁有層級(jí)關(guān)系,父節(jié)點(diǎn)(parent)擁有子節(jié)點(diǎn)(child)翘单,同級(jí)的節(jié)點(diǎn)被稱為兄弟節(jié)點(diǎn)(sibling)
  • 節(jié)點(diǎn)樹中吨枉,頂端節(jié)點(diǎn)稱為根(root),除了跟節(jié)點(diǎn)外每個(gè)節(jié)點(diǎn)都有父節(jié)點(diǎn)哄芜,同時(shí)可擁有任意數(shù)量的子節(jié)點(diǎn)或兄弟節(jié)點(diǎn)

選擇器

CSS選擇器用于定位節(jié)點(diǎn)

  • 開頭(#id)代表選擇id东羹,其后緊跟id的名稱

  • .開頭(.class)代表選擇class,其后緊跟class的名稱
  • element 是根據(jù)標(biāo)簽名篩選
  • CSS選擇器支持嵌套選擇忠烛,各個(gè)選擇器之間加空格可代表嵌套關(guān)系属提,若不加空格則代表并列關(guān)系

爬蟲的基本原理

爬蟲就是獲取網(wǎng)頁提取保存信息的自動(dòng)化程序

  • 基于HTTP或HTTPS協(xié)議的URL對(duì)應(yīng)的數(shù)據(jù),爬蟲皆可抓取

  • 由JavaScript渲染的網(wǎng)頁美尸,可分析其后臺(tái)Ajax接口冤议,或使用Selenium、Splash等庫來模擬JavaScript渲染

會(huì)話和Cookies

  • 靜態(tài)網(wǎng)頁:靜態(tài)網(wǎng)頁是文字师坎、圖片等內(nèi)容均通過既定的HTML代碼指定的頁面
  • 動(dòng)態(tài)網(wǎng)頁:動(dòng)態(tài)網(wǎng)頁是可動(dòng)態(tài)解析URL中參數(shù)的變化恕酸,管理數(shù)據(jù)庫并動(dòng)態(tài)呈現(xiàn)不同的內(nèi)容的頁面
  • 無狀態(tài)HTTP:HTTP的無狀態(tài)是指HTTP協(xié)議對(duì)事務(wù)的處理缺少狀態(tài)記錄,服務(wù)器不會(huì)記錄請(qǐng)求過程前后的狀態(tài)變化
  • 會(huì)話:在Web中會(huì)話對(duì)象用來存儲(chǔ)特定用戶會(huì)話所需的屬性及配置信息
  • Cookies:Cookies是指某些網(wǎng)站為了辨別用戶身份胯陋、進(jìn)行會(huì)話跟蹤而存儲(chǔ)在用戶本地終端上的數(shù)據(jù)

Cookies的屬性結(jié)構(gòu)

  • Name:Cookie的名稱蕊温,一旦創(chuàng)建便不可修改
  • Value:Cookie的值
  • Domain:可以訪問Cookie的域名
  • Max Age:Cookie失效時(shí)間
  • Path:Cookie的使用路徑,如果設(shè)置為/遏乔,則本域名下所有頁面都可以訪問該Cookie
  • Size字段:Cookie的大小
  • HTTP字段:Cookie的httponly屬性义矛,若為true,則只有在HTTP頭中會(huì)帶有此Cookie信息盟萨,而不能通過document.cookie來訪問該Cookie
  • Secure:該Cookie是否被使用安全協(xié)議傳輸

代理的基本原理

代理服務(wù)器(proxy server)的功能是代理網(wǎng)絡(luò)用戶去取得網(wǎng)絡(luò)信息凉翻。

代理的作用

  • 突破自身IP訪問限制
  • 訪問某些內(nèi)部資源
  • 提高訪問速度
  • 隱藏真實(shí)IP
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市捻激,隨后出現(xiàn)的幾起案子制轰,更是在濱河造成了極大的恐慌前计,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垃杖,死亡現(xiàn)場(chǎng)離奇詭異男杈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)调俘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門伶棒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人脉漏,你說我怎么就攤上這事⌒溲溃” “怎么了侧巨?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)鞭达。 經(jīng)常有香客問我司忱,道長(zhǎng),這世上最難降的妖魔是什么畴蹭? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任坦仍,我火速辦了婚禮,結(jié)果婚禮上叨襟,老公的妹妹穿的比我還像新娘繁扎。我一直安慰自己,他們只是感情好糊闽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布梳玫。 她就那樣靜靜地躺著,像睡著了一般右犹。 火紅的嫁衣襯著肌膚如雪提澎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天念链,我揣著相機(jī)與錄音盼忌,去河邊找鬼。 笑死掂墓,一個(gè)胖子當(dāng)著我的面吹牛谦纱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播君编,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼服协,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了啦粹?” 一聲冷哼從身側(cè)響起偿荷,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤窘游,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后跳纳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忍饰,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年寺庄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了艾蓝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡斗塘,死狀恐怖赢织,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情馍盟,我是刑警寧澤于置,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站贞岭,受9級(jí)特大地震影響八毯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瞄桨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一话速、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芯侥,春花似錦泊交、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至物赶,卻和暖如春白指,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酵紫。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工告嘲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奖地。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓橄唬,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親参歹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仰楚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容