百度百科上這麼介紹爬蟲:html
網絡爬蟲(又被稱爲網頁蜘蛛,網絡機器人,在FOAF社區中間,更常常的稱爲網頁追逐者),是一種按照必定的規則,自動地抓取萬維網信息的程序或者腳本。web
在開發爬蟲時經常使用的工具:chrome瀏覽器,fiddler工具,postman插件。chrome
有關fiddler知識的地址:http://kb.cnblogs.com/page/130367/瀏覽器
下面普及最基礎的知識:Http請求。(下面知識來源於:http://www.runoob.com/http/http-intro.html)緩存
定義:服務器
HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。TTP是一個基於TCP/IP通訊協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。cookie
工做原理:網絡
HTTP協議工做於客戶端-服務端架構爲上。瀏覽器做爲HTTP客戶端經過URL向HTTP服務端即WEB服務器發送全部請求。架構
Web服務器有:Apache服務器,IIS服務器(Internet Information Services)等。app
Web服務器根據接收到的請求後,向客戶端發送響應信息。HTTP默認端口號爲80,可是你也能夠改成8080或者其餘端口。
HTTP三點注意事項:
HTTP是基於客戶端/服務端(C/S)的架構模型,經過一個可靠的連接來交換信息,是一個無狀態的請求/響應協議。
一個HTTP"客戶端"是一個應用程序(Web瀏覽器或其餘任何客戶端),經過鏈接到服務器達到向服務器發送一個或多個HTTP的請求的目的。
一個HTTP"服務器"一樣也是一個應用程序(一般是一個Web服務,如Apache Web服務器或IIS服務器等),經過接收客戶端的請求並向客戶端發送HTTP響應數據。
HTTP使用統一資源標識符(Uniform Resource Identifiers, URI)來傳輸數據和創建鏈接。
一旦創建鏈接後,數據消息就經過相似Internet郵件所使用的格式[RFC5322]和多用途Internet郵件擴展(MIME)[RFC2045]來傳送。
請求消息的結構圖解:
客戶端發送一個HTTP請求到服務器的請求消息包括如下格式:請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成,下圖給出了請求報文的通常格式。
http請求頭詳解:(參考:https://kb.cnblogs.com/page/92320/)
請求頭 | 請求頭屬性 |
Cache-Control | 指定請求應遵循的緩存機制,其中緩存指令:no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached。 no-cache:表示請求的消息不能夠緩存 no-store:在請求消息中,表示請求和響應的消息均不能夠緩存,爲了防止重要的消息被無心間泄露 max-age:表示客戶機接收相應消息的最大時間(最大生存期) max-stale:表示客戶機能夠接受超時的消息,若是指定該值,表示能夠接受超時以後指定值以內的消息 min-fresh:表示客戶機能夠接受當前時間加上指定值的時間以內的消息 only-if-cached:表示客戶機只接受被緩存的內容 |
Date | 表示消息發送的時間,時間的描述格式由rfc822定義。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的時間表示世界標準時,換算成本地時間,須要知道用戶所在的時區。 |
Pragma | 反正頁面被緩存,在http1.1版本中,與Cache-Control:no-cache,做用相同,在http1.0中沒有實現Cache-Control.Pragma只有一個用法:Pragma:no-cache |
Host | 請求報頭域主要用於指定被請求資源的Internet主機和端口號,它一般從HTTP URL中提取出來的。若是不是默認的80端口,會指定端口。若是不指定host,會報400錯誤 |
Referer | 爲服務器提供上下文信息,告訴服務器,我這個連接是從什麼地方轉過來的。 |
Range | 只請求實體的一部分,服務器能夠忽略此請求。 頭500個字節:bytes=0-499。第二個500字節:bytes=500-999。最後500個字節:bytes=-500。500字節之後的範圍:bytes=500-。第一個和最後一個字節:bytes=0-0,-1。同時指定幾個範圍:bytes=500-600,601-999 |
User-Agent | 表示包含發送請求的用戶信息。若是是瀏覽器發送的話,基本就是瀏覽器的信息 |
Accept | 表示客戶端可以接受的內容類型,例:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 若是想知道更多的MIME類型,去這個網站:http://www.w3school.com.cn/media/media_mimeref.asp |
Accept-Charset | 表示瀏覽器能夠接受的字符編碼集。在國內最經常使用的就是utf8,gbk。想了解更多:https://zh.wikipedia.org/wiki/%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81 |
Accept-Encoding | 指定瀏覽器能夠支持的web服務器返回內容壓縮編碼類型。經常使用的:compress, gzip |
Accept-Language | 指定瀏覽器能夠接受的語言。經常使用的 en,zh |
Accept-Ranges | 能夠請求網頁實體的一個或者多個子範圍字段。例:Accept-Ranges: bytes |
Authorization | http受權的受權證書 |
Connection | 是否保持持久鏈接。close:表示不保持持久鏈接,keep-alive:保持持久鏈接。(HTTP 1.1默認進行持久鏈接) |
Cookie | 存儲的一些有關該客戶機的信息,發送http請求時,會把該域名下的全部cookie,一塊兒發送給服務器。 |
Content-Length | 表示請求內容的長度 |
Content-Type | 請求實體的MIME類型。若是想知道更多的MIME類型,去這個網站:http://www.w3school.com.cn/media/media_mimeref.asp |
Expect | 請求的特定的服務器類型,不是太明白,有懂得能夠幫我解釋一下 |
From | 發出請求的用戶的Email |
If-Match | 只有請求內容與實體相匹配纔有效 |
If-Modified-Since | 若是請求的部分在指定時間以後被修改則請求成功,未被修改則返回304代碼 |
If-None-Match | 若是內容未改變返回304代碼,參數爲服務器先前發送的Etag,與服務器迴應的Etag比較判斷是否改變 |
If-Range | 若是實體未改變,服務器發送客戶端丟失的部分,不然發送整個實體。參數也爲Etag |
If-Unmodified-Since | 只在實體在指定時間以後未被修改才請求成功 |
Max-Forwards | 限制信息經過代理和網關傳送的時間 |
Proxy-Authorization | 鏈接到代理的受權證書 |
TE | 客戶端願意接受的傳輸編碼,並通知服務器接受接受尾加頭信息 |
Upgrade | 向服務器指定某種傳輸協議以便服務器進行轉換(若是支持) |
Via | 通知中間網關或代理服務器地址,通訊協議 |
Warning | 關於消息實體的警告信息 |
http迴應頭詳解:
請求頭 | 請求頭屬性 |
Cache- Control | 指定請求應遵循的緩存機制,其中緩存指令:no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached。 no-cache:表示請求的消息不能夠緩存 no-store:在請求消息中,表示請求和響應的消息均不能夠緩存,爲了防止重要的消息被無心間泄露 max-age:表示客戶機接收相應消息的最大時間(最大生存期) max-stale:表示客戶機能夠接受超時的消息,若是指定該值,表示能夠接受超時以後指定值以內的消息 min-fresh:表示客戶機能夠接受當前時間加上指定值的時間以內的消息 only-if-cached:表示客戶機只接受被緩存的內容 |
Date | 原始服務器消息發出的時間,時間的描述格式由rfc822定義。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的時間表示世界標準時,換算成本地時間,須要知道用戶所在的時區。 |
Expires | 響應過時的日期和時間 |
Pragma | 不容許頁面被緩存,在http1.1版本中,與Cache-Control:no-cache,做用相同,在http1.0中沒有實現Cache-Control.Pragma只有一個用法:Pragma:no-cache |
User-Agent | 表示包含發送請求的用戶信息。若是是瀏覽器發送的話,基本就是瀏覽器的信息 |
Accept-Ranges | 能夠請求網頁實體的一個或者多個子範圍字段。例:Accept-Ranges: bytes |
Age | 從原始服務器到代理緩存造成的估算時間(以秒計,非負) |
Allow | 對某網絡資源的有效的請求行爲,不容許則返回405,請求行爲:Get,Post,Head等,下面會重點介紹 |
Content-Encoding | web服務器支持的返回內容壓縮編碼類型 |
Content-Language | 響應體的語言 |
Content-Location | 請求資源可替代的備用的另外一地址 |
Content-MD5 | 返回資源的MD5校驗值 |
Content-Range | 在整個返回體中本部分的字節位置 |
Connection | 是否保持持久鏈接。close:表示不保持持久鏈接,keep-alive:保持持久鏈接。(HTTP 1.1默認進行持久鏈接) |
Cookie | 存儲的一些有關該客戶機的信息,發送http請求時,會把該域名下的全部cookie,一塊兒發送給服務器。 |
Content-Length | 響應體內容的長度 |
Content-Type | 返回內容的MIME類型。若是想知道更多的MIME類型,去這個網站:http://www.w3school.com.cn/media/media_mimeref.asp |
Via | 通知中間網關或代理服務器地址,通訊協議 |
Warning | 關於消息實體的警告信息 |
ETag | 請求變量的實體標籤的當前值 |
Last-Modified | 請求資源的最後修改時間 |
Location | 用來重定向接收方到非請求URL的位置來完成請求或標識新的資源 |
Proxy-Authenticate | 它指出認證方案和可應用到代理的該URL上的參數 |
refresh | 應用於重定向或一個新的資源被創造,在5秒以後重定向(由網景提出,被大部分瀏覽器支持) |
Retry-After | 若是實體暫時不可取,通知客戶端在指定時間以後再次嘗試 |
Server | web服務器軟件名稱 |
Set-Cookie | 設置Http Cookie |
Trailer | 指出頭域在分塊傳輸編碼的尾部存在 |
Transfer-Encoding | 文件傳輸編碼 |
Vary | 告訴下游代理是使用緩存響應仍是從原始服務器請求 |
WWW-Authenticate | 代表客戶端請求實體應該使用的受權方案 |
關於請求頭與迴應頭,更多的能夠訪問W3C官網:https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
http請求方法:
(轉自:http://www.runoob.com/http/http-methods.html)
HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
請求方法 | 描述 |
GET | 請求指定的頁面信息,並返回實體主體。 |
HEAD | 相似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭 |
POST | 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會致使新的資源的創建和/或已有資源的修改。 |
PUT | 從客戶端向服務器傳送的數據取代指定的文檔的內容。 |
DELETE | 請求服務器刪除指定的頁面。 |
CONNECT | HTTP/1.1協議中預留給可以將鏈接改成管道方式的代理服務器。 |
OPTIONS | 容許客戶端查看服務器的性能。 |
TRACE | 回顯服務器收到的請求,主要用於測試或診斷。 |
http狀態碼:
(轉自:http://www.runoob.com/http/http-status-codes.html)
分類 | 分類描述 |
1** | 信息,服務器收到請求,須要請求者繼續執行操做 |
2** | 成功,操做被成功接收並處理 |
3** | 重定向,須要進一步的操做以完成請求 |
4** | 客戶端錯誤,請求包含語法錯誤或沒法完成請求 |
5** | 服務器錯誤,服務器在處理請求的過程當中發生了錯誤 |