天天看點

了解爬蟲,這一篇就夠了!

爬蟲基本原理

爬蟲的基本原理是基于網站網絡協定,根據網址批量擷取到網頁上的資訊操作過程。簡單一點說就是用計算機程式來模拟人工點選網頁擷取資料的過程。

本教程将通過網絡協定介紹、http請求流程、網頁中的請求與傳回、爬蟲工作過程來為大家詳細介紹爬蟲是如何展開工作的。

了解爬蟲,這一篇就夠了!
  • 網絡協定

我們經常會在URL的首部會看到http或者https,這個就是通路資源需要的協定類型,爬蟲常用的是http和https協定。

http(HyperText Transfer Protocol )超文本傳輸協定,是網際網路上應用最為廣泛的一種網絡協定。http是可靠的資料傳輸協定,由于它是短連結的,也就是一次請求,一次響應斷開,是以它表現處無狀态的現象。

https ( Hyper Text Transfer Protocol over Secure Socket Layer)是以安全為目标的 HTTP 通道,可以了解為是HTTP的安全版,即 HTTP 下加入 SSL 層,簡稱為 HTTPS。HTTPS的安全基礎是SSL,是以他傳輸的内容都是經過SSL加密的,它的主要作用:

1.建立一個資訊安全通道,來保證資料的傳輸安全。

2.确認網站的真實性,凡是使用了 https 的網站,都可以通過點選浏覽器位址欄的鎖頭标志來檢視網站認證之後的真實資訊,也可以通過 CA 機構頒發的安全簽章來查詢。

HTTP和HTTPS的差別:

1.https協定需要到ca申請證書,一般免費證書很少,需要交費。

2.http是超文本傳輸協定,資訊是明文傳輸,https 則是具有安全性的ssl加密傳輸協定。

3.http和https使用的是完全不同的連接配接方式,用的端口也不一樣,前者是80,後者是443。

4.http的連接配接很簡單,是無狀态的;HTTPS協定是由SSL+HTTP協定建構的可進行加密傳輸、身份認證的網絡協定,比http協定安全。

  • HTTP/HTTPS請求流程

一次HTTP請求操作,其過程可分為4步:

1.在浏覽器位址欄(或點選一個超連結)HTTP的工作就開始了;

2.建立連接配接後,用戶端向伺服器端發送一個請求;

3.伺服器接受到請求後,給其響應;

4.用戶端浏覽器接受響應之後,在使用者的浏覽器渲染顯式。然後用戶端和伺服器端斷開連接配接。

HTTPS是基于HTTP的,不同的是他在TCP/IP協定上面又新加了一層SSL。一次HTTPS請求操作,其過程可分為6步:

1、用戶端發送請求https連接配接;

2、伺服器傳回加密公鑰,通常是SSL證書;

3、用戶端從這個SSL證書解析出公鑰,并随機生成一個key,通過公鑰加密這個key發送給伺服器(這一步是安全的因為隻有伺服器才有私鑰能讀出這個key);

4、伺服器通過私鑰解密出key;

5、用戶端使用這個key來加密需要傳輸的資料;

6、伺服器使用key來解析資料。

  • 網頁中的請求與傳回

打開任何一個網頁,F12,選擇Network,清除後重新整理,就會出來一系列的請求資料。

了解爬蟲,這一篇就夠了!

Headers是網絡協定請求和相應的核心,它承載了關于用戶端浏覽器,請求頁面,伺服器等相關的資訊。

request headers可以了解為用于在請求消息中向伺服器傳遞附加資訊,主要包括客戶機可以接受的資料類型,壓縮方法,語言,以及客戶計算機上保留的資訊和發出該請求的超連結源位址等。以下為request headers屬性簡介:

屬性名稱 意義 示例
Accept 指定用戶端能夠接收的内容類型

Accept:

*/*

Accept-Encoding 指定浏覽器可以支援的web伺服器傳回内容壓縮編碼類型

Accept-Encoding:

gzip, deflate, br

Accept-Language 浏覽器所希望的語言種類
Cache-Control 緩存機制

Cache-Control:

max-age=0

Connection 表示是否需要持久連接配接。(HTTP 1.1預設進行持久連接配接)

Connection:

keep-alive

Cookie HTTP請求發送時,會把儲存在該請求域名下的所有cookie值一起發送給web伺服器。
Host 指定請求的伺服器的域名和端口号

Host:

www.baidu.com

Referer 包含一個URL,使用者從該URL代表的頁面出發通路目前請求的頁面。
From 請求發送者的email位址,由一些特殊的Web客戶程式使用,浏覽器不會用到它。

response headers可以了解為用于在http請求中伺服器向浏覽器傳遞附加資訊,主要包括伺服器傳遞的資料類型,使用的壓縮方法,語言,以及伺服器的資訊和響應該請求的時間等。以下為Response 屬性:

屬性名稱 意義 示例
Accept-Ranges

Web伺服器表示自己是否接受擷取某個實體的一部分(比如檔案的一部分)的請求

bytes:接受 none:不接受

Accept-Ranges:bytes
Access-Control-Allow-Origin 指定哪些網站可以跨域源資源共享 Access-Control-Allow-Origin:*
age 響應對象在代理緩存中存在的時間,以秒為機關 Age:234585576
Access-Control-Allow-Methods 允許的http請求方法 Access-Control-Allow-Methods: POST, GET, OPTIONS
Allow Allow支援标題列出資源集合的方法。 Allow: GET, POST, HEAD
Connection

告訴WEB伺服器或者代理伺服器,在完成本次請求的響應 後,該做什麼

close:斷開連接配接,不要等待本次連接配接的後續請求了

keep-alive:保持連接配接,等待本次連接配接的後續請求

Connection: keep-alive
Cache-Control

通知從伺服器到用戶端内的所有緩存機制,表示它們是否可以緩存這個對象及緩存有效時間。其機關為秒

no-cache:可以在本地進行緩存,但是每次發起請求都需要到伺服器去驗證一下,如果伺服器傳回告訴你可以使用本地緩存,你才可以去使用本地的緩存

no-store:本地不可進行緩存的,每次發起請求,都需要去服務端去拿去數ju

public:在HTTP請求傳回的内容經過的所有路徑中,都可以對傳回内容進行一個緩存的操作。

private:隻有發起請求的浏覽器才可以進行緩存

max-age=<seconds>:緩存多少秒之後才會過期。

s-maxage=<seconds>:它會替代max-age,但是隻有在 代理伺服器中才會起作用。

max-stale=<seonds>:當我們緩存過期以後,如果有max-stale,隻要在max-stale這個時間之内,還會使用過期的緩存。隻有在發起端設定才有用,在服務端設定沒有用。

must-revalidate:如果我們的和緩存過期了,我們必須重新發送到源服務端,重新擷取這部分資料,來驗證這部分資料是否真的過期了

proxy-revalidate:用在緩存伺服器中,緩存過期後,必須要去源伺服器上重新請求一次,而不能使用本地的緩存

Cache-Control:no-cache
Content-Type

伺服器告訴浏覽器它發送的資料屬于什麼檔案類型,也就是響應資料的MIME類型

格式:Content-Type:type/subtype ;parameter

type:主類型,任意的字元串,如text,如果是*号代表所有;

subtype:子類型,任意的字元串,如html,如果是*号代表所有,用“/”與主類型隔開;

parameter:可選參數,如charset,boundary等。

Content-Type:

application/json;charset=utf-8

content-length 響應資料的資料長度,機關是byte content-length: 0
Content-Encoding

伺服器采用哪種編碼格式傳輸正文

其值有:gzip;x-gzip;compress等

Content-Encoding:gzip
Date 響應消息發送的GMT格式日期 date: Mon, 06 May 2019 22:48:29 GMT
ETag

就是一個對象(比如URL)的标志值

主要供 WEB 伺服器 判斷一個對象是否改變了

Expired 告訴用戶端該響應資料會在指定的時間過期,通常用于給用戶端緩存作為參考。

expires:

Thu, 28 Jun 2018 11:27:53 GMT

via 告訴用戶端,該回應經曆了那些代理。 Via: 1.0 example1.com, 1.1 example2.com (Apache/1.1)
status 傳回的狀态碼 Status:200
Server 伺服器名稱

頁面資料的擷取,其實就是從用戶端發送請求到伺服器,然後由伺服器根據請求傳回資料的過程,這也是爬蟲抓取資料的基本原理。

  • ForeSpider爬蟲工作過程

1.擷取網頁資料

爬蟲的擷取頁面其實是擷取網頁源代碼,然後從中提取我們想要的資料。

ForeSpider爬蟲工具中已經搭建好了抓取的腳本架構,隻需要按照人工點選進入頁面的過程在爬蟲軟體中進行配置展現即可。

案例一:采集鳳凰網每日要聞

人工:打開網站→點選新聞清單中某個新聞→打開新聞看到資料。

爬蟲:建立任務→抽取新聞清單連結→抽取資料。

如下圖所示:

了解爬蟲,這一篇就夠了!
了解爬蟲,這一篇就夠了!
了解爬蟲,這一篇就夠了!

案例二:采集孔夫子舊書網所有分類的舊書資訊

人工:選擇某圖書類别→點選某類别圖書清單中某一本→打開圖書界面,看到資料。

爬蟲:抽取所有分類連結→抽取某分類所有清單連結→抽取資料。

了解爬蟲,這一篇就夠了!
了解爬蟲,這一篇就夠了!
了解爬蟲,這一篇就夠了!
了解爬蟲,這一篇就夠了!
了解爬蟲,這一篇就夠了!

2.采集資料

配置好爬蟲後,點選開始采集。以案例二為例,如下圖所示:

了解爬蟲,這一篇就夠了!
了解爬蟲,這一篇就夠了!
  1. 導出資料

采集完資料以後可以直接導出資料為csv/excel格式。

了解爬蟲,這一篇就夠了!
了解爬蟲,這一篇就夠了!

點選這裡,下載下傳免費爬蟲軟體