網絡爬蟲簡介

網絡爬蟲簡介css

網絡爬蟲(又被稱爲網頁蜘蛛,網絡機器人,在FOAF社區中間,更常常的稱爲網頁追逐者),是一種按照必定的規則,自動地抓取萬維網信息的程序或者腳本。html

傳統爬蟲從一個或若干初始網頁的URL開始,得到初始網頁上的URL,在抓取網頁的過程當中,不斷從當前頁面上抽取新的URL放入隊列,直到知足系統的必定中止條件。聚焦爬蟲的工做流程較爲複雜,須要根據必定的網頁分析算法過濾與主題無關的連接,保留有用的連接並將其放入等待抓取的URL隊列。而後,它將根據必定的搜索策略從隊列中選擇下一步要抓取的網頁URL,並重覆上述過程,直到達到系統的某一條件時中止。程序員

另外,全部被爬蟲抓取的網頁將會被系統存貯,進行必定的分析、過濾,並創建索引,以便以後的查詢和檢索;對於聚焦爬蟲來講,這一過程所獲得的分析結果還可能對之後的抓取過程給出反饋和指導。

如下爲文章主要內容:
算法

網絡爬蟲簡介

  1. 初見爬蟲

使用Python中的Requests第三方庫。在Requests的7個主要方法中,最常使用的就是get()方法,經過該方法構造一個向服務器請求資源的Request對象,結果返回一個包含服務器資源的額Response對象。經過Response對象則能夠獲取請求的返回狀態、HTTP響應的字符串即URL對應的頁面內容、頁面的編碼方式以及頁面內容的二進制形式。瀏覽器

在瞭解get()方法以前咱們先了解一下HTTP協議,經過對HTTP協議來理解咱們訪問網頁這個過程到底都進行了哪些工做。安全

1.1 淺析HTTP協議服務器

超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最爲普遍的一種網絡協議。全部的www文件都必須遵照這個標準。HTTP協議主要有幾個特色:網絡

支持客戶/服務器模式
簡單快捷:客服向服務器發出請求,只須要傳送請求方法和路徑。請求方法經常使用的有GET, HEAD, POST。每種方法規定了客戶與服務器聯繫的類型不一樣。因爲HTTP協議簡單,使得HTTP服務器的程序規模小,於是通訊速度快。
靈活:HTTP容許傳輸任意類型的數據對象。
無鏈接:無鏈接的含義是限制每次鏈接請求只處理一個請求。服務器處理完客戶的請求,收到客戶的應答後即斷開鏈接,這種方式能夠節省傳輸時間。
無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事物處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大,另外一方面,在服務器不須要先前信息時它的應答就較快。ide

爬取過程
性能

  1. 首先瀏覽器拿到網址以後先將主機名解析出來。如 http://www.baidu.com/index.html 則會將主機名 www.baidu.com 解析出來。

  2. 查找ip,根據主機名,會首先查找ip,首先查詢hosts文件,成功則返回對應的ip地址,若是沒有查詢到,則去DNS服務器查詢,成功就返回ip,不然會報告鏈接錯誤。

  3. 發送http請求,瀏覽器會把自身相關信息與請求相關信息封裝成HTTP請求 消息發送給服務器。

  4. 服務器處理請求,服務器讀取HTTP請求中的內容,在通過解析主機,解析站點名稱,解析訪問資源後,會查找相關資源,若是查找成功,則返回狀態碼200,失敗就會返回大名鼎鼎的404了,在服務器監測到請求不在的資源後,能夠按照程序員設置的跳轉到別的頁面。因此有各類有個性的404錯誤頁面。

  5. 服務器返回HTTP響應,瀏覽器獲得返回數據後就能夠提取數據,而後調用解析內核進行翻譯,最後顯示出頁面。以後瀏覽器會對其引用的文件好比圖片,css,js等文件不斷進行上述過程,直到全部文件都被下載下來以後,網頁就會顯示出來。

HTTP請求,http請求由三部分組成,分別是:請求行、消息報頭、請求正文。請求方法(全部方法全爲大寫)有多種,各個方法的解釋以下:

GET 請求獲取Request-URI所標識的資源
POST 在Request-URI所標識的資源後附加新的數據
HEAD 請求獲取由Request-URI所標識的資源的響應消息報頭
PUT 請求服務器存儲一個資源,並用Request-URI做爲其標識
DELETE 請求服務器刪除Request-URI所標識的資源
TRACE 請求服務器回送收到的請求信息,主要用於測試或診斷
CONNECT 保留未來使用
OPTIONS 請求查詢服務器的性能,或者查詢與資源相關的選項和需求

GET方法應用舉例:在瀏覽器的地址欄中輸入網址的方式訪問網頁時,瀏覽器採用GET方法向服務器獲取資源,eg:GET /form.html HTTP/1.1 (CRLF)

HTTP響應也是由三個部分組成,分別是:狀態行、消息報頭、響應正文。

狀態行格式以下:HTTP-Version Status-Code Reason-Phrase CRLF,其中,HTTP-Version表示服務器HTTP協議的版本;Status-Code表示服務器發回的響應狀態代碼;Reason-Phrase表示狀態代碼的文本描述。

狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:

1xx:指示信息--表示請求已接收,繼續處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進行更進一步的操做
4xx:客戶端錯誤--請求有語法錯誤或請求沒法實現
5xx:服務器端錯誤--服務器未能實現合法的請求

常見狀態代碼、狀態描述、說明:

200 OK //客戶端請求成功
400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解
401 Unauthorized //請求未經受權,這個狀態代碼必須和WWW-Authenticate報頭域一塊兒使用
403 Forbidden //服務器收到請求,可是拒絕提供服務
404 Not Found //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error //服務器發生不可預期的錯誤
503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間後可能恢復正常。

eg:HTTP/1.1 200 OK (CRLF)

詳細的HTTP協議能夠參考這篇文章:
http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html

前面咱們瞭解了HTTP協議,那麼咱們訪問網頁的過程,那麼網頁在是什麼樣子的。爬蟲眼中的網頁又是什麼樣子的。

網是靜態的,但爬蟲是動態的,因此爬蟲的基本思想就是沿着網頁(蜘蛛網的節點)上的連接的爬取有效信息。固然網頁也有動態(通常用PHP或ASP等寫成,例如用戶登錄界面就是動態網頁)的,但若是一張蛛網風雨飄搖,蜘蛛會感到不那麼安穩,因此動態網頁的優先級通常會被搜索引擎排在靜態網頁的後面。

知道了爬蟲的基本思想,那麼具體如何操做呢?這得從網頁的基本概念提及。一個網頁有三大構成要素,分別是html文件、css文件和JavaScript文件。若是把一個網頁看作一棟房子,那麼html至關於房子外殼;css至關於地磚塗料,美化房子外觀內飾;JavaScript則至關於傢俱電器浴池等,增長房子的功能。從上述比喻能夠看出,html纔是網頁的根本,畢竟地磚顏料在市場上也有,傢俱電器均可以露天擺設,而房子外殼纔是獨一無二的。

下面就是一個簡單網頁的例子:

網絡爬蟲簡介

而在爬蟲眼裏,這個網頁是這樣的:

網絡爬蟲簡介

所以網頁實質上就是超文本(hypertext),網頁上的全部內容都是在形如「<>...</>」這樣的標籤以內的。若是咱們要蒐集網頁上的全部超連接,只需尋找全部標籤中前面是"href="的字符串,並查看提取出來的字符串是否以"http"(超文本轉換協議,https表示安全的http協議)開頭便可。若是超連接不以"http"開頭,那麼該連接極可能是網頁所在的本地文件或者ftp或smtp(文件或郵件轉換協議),應該過濾掉。

在Python中咱們使用Requests庫中的方法來幫助咱們實現對網頁的請求,從而達到實現爬蟲的過程。

1.2 Requests庫的7個主要方法:

網絡爬蟲簡介

最經常使用的方法get用來實現一個簡單的小爬蟲,經過示例代碼展現:

網絡爬蟲簡介

  1. Robots協議

Robots協議(也稱爲爬蟲協議、機器人協議等)的全稱是「網絡爬蟲排除標準」(Robots Exclusion Protocol),網站經過Robots協議告訴搜索引擎哪些頁面能夠抓取,哪些頁面不能抓取。經過幾個小例子來解讀一下robots.txt中的內容,robots.txt默認放置於網站的根目錄小,對於一個沒有robots.txt文件的網站,默認是容許全部爬蟲獲取其網站內容的。

網絡爬蟲簡介
若是是商業利益咱們是必需要遵照robots協議內容,不然會承擔相應的法律責任。當只是我的玩轉網頁、練習則是建議遵照,提升本身編寫爬蟲的友好程度。

  1. 網頁解析

BeautifulSoup嘗試化平淡爲神奇,經過定位HTML標籤來格式化和組織複雜的網絡信息,用簡單易用的Python對象爲咱們展現XML結構信息。

BeautifulSoup是解析、遍歷、維護「標籤樹」的功能庫。

3.1 BeautifulSoup的解析器

網絡爬蟲簡介

BeautifulSoup經過以上四種解析器來對咱們獲取的網頁內容進行解析。使用官網的例子來看一下解析結果:

網絡爬蟲簡介
首先獲取以上的一段HTML內容,咱們經過BeautifulSoup解析以後,而且輸出解析後的結果來對比一下:

網絡爬蟲簡介

網絡爬蟲簡介

更多介紹點擊下面的連接

來源:
https://mp.weixin.qq.com/s/sqJxmMOcm0i_XN0vzlwwqQ

相關文章
相關標籤/搜索