爬蟲基礎(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)求過程
- 向?yàn)g覽器輸入U(xiǎn)RL
- 瀏覽器向服務(wù)器發(fā)送請(qǐng)求
- 服務(wù)器對(duì)請(qǐng)求進(jìn)行處理和解析潘悼,返回對(duì)應(yīng)的響應(yīng)
- 瀏覽器對(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è)不同的部分
- 核心DOM:針對(duì)任何結(jié)構(gòu)化文檔的標(biāo)準(zhǔn)模型
- XML DOM:針對(duì)XML文檔的標(biāo)準(zhǔn)模型
- 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