爬蟲入門的基本原理,若是你連這些都不知道那你能夠放棄爬蟲了!

咱們每天處處看到爬蟲爬蟲的,你瞭解爬蟲是什麼嗎?你知道爬蟲的爬取流程嗎?你知道怎麼處理爬取中出現的問題嗎?若是你回答不出來,或許你真的要好好看看這篇文章了!css

爬蟲入門的基本原理,若是你連這些都不知道那你能夠放棄爬蟲了!

 

爬蟲簡介

網絡爬蟲(Web crawler),是一種按照必定的規則,自動地抓取萬維網信息的程序或者腳本,它們被普遍用於互聯網搜索引擎或其餘相似網站,能夠自動採集全部其可以訪問到的頁面內容,以獲取或更新這些網站的內容和檢索方式。從功能上來說,爬蟲通常分爲數據採集,處理,儲存三個部分。傳統爬蟲從一個或若干初始網頁的URL開始,得到初始網頁上的URL,在抓取網頁的過程當中,不斷從當前頁面上抽取新的URL放入隊列,直到知足系統的必定中止條件。聚焦爬蟲的工做流程較爲複雜,須要根據必定的網頁分析算法過濾與主題無關的連接,保留有用的連接並將其放入等待抓取的URL隊列。而後,它將根據必定的搜索策略從隊列中選擇下一步要抓取的網頁URL,並重覆上述過程,直到達到系統的某一條件時中止。另外,全部被爬蟲抓取的網頁將會被系統存貯,進行必定的分析、過濾,並創建索引,以便以後的查詢和檢索;對於聚焦爬蟲來講,這一過程所獲得的分析結果還可能對之後的抓取過程給出反饋和指導。python

爬蟲原理

Web網絡爬蟲系統的功能是下載網頁數據,爲搜索引擎系統提供數據來源。不少大型的網絡搜索引擎系統都被稱爲基於 Web數據採集的搜索引擎系統,好比 Google、Baidu。因而可知Web 網絡爬蟲系統在搜索引擎中的重要性。網頁中除了包含供用戶閱讀的文字信息外,還包含一些超連接信息。Web網絡爬蟲系統正是經過網頁中的超鏈接信息不斷得到網絡上的其它網頁。正是由於這種採集過程像一個爬蟲或者蜘蛛在網絡上漫遊,因此它才被稱爲網絡爬蟲系統或者網絡蜘蛛系統,在英文中稱爲Spider或者Crawler。正則表達式

爬蟲入門的基本原理,若是你連這些都不知道那你能夠放棄爬蟲了!

 

 

爬蟲基本流程

  1. 發起請求:經過HTTP庫向目標站點發起請求,即發送一個Request,請求能夠包含額外的headers等信息,等待服務器響應。
  2. 獲取響應內容:若是服務器能正常響應,會獲得一個Response,Response的內容即是所要獲取的頁面內容,類型可能有HTML,Json字符串,二進制數據(如圖片視頻)等類型。
  3. 解析內容:獲得的內容多是HTML,能夠用正則表達式、網頁解析庫進行解析。多是Json,能夠直接轉爲Json對象解析,多是二進制數據,能夠作保存或者進一步的處理。
  4. 保存數據:保存形式多樣,能夠存爲文本,也能夠保存至數據庫,或者保存特定格式的文件。

Request和Response

Request:瀏覽器就發送消息給該網址所在的服務器,這個過程叫作HTTP Request。算法

Response:服務器收到瀏覽器發送的消息後,可以根據瀏覽器發送消息的內容,作相應處理,而後把消息回傳給瀏覽器。這個過程叫作HTTP Response。瀏覽器收到服務器的Response信息後,會對信息進行相應處理,而後展現。數據庫

Request詳解

請求方式:主要有GET、POST兩種類型,另外還有HEAD、PUT、DELETE、OPTIONS等。瀏覽器

請求URL:URL全稱統一資源定位符,如一個網頁文檔、一張圖片、一個視頻等均可以用URL惟一來肯定。服務器

請求頭:包含請求時的頭部信息,如User-Agent、Host、Cookies等信息。網絡

請求體:請求時額外攜帶的數據如表單提交時的表單數據。ide

Response詳解

響應狀態:有多種響應狀態,如200表明成功、301跳轉、404找不到頁面、502服務器錯誤。學習

響應頭:如內容類型、內容長度、服務器信息、設置Cookie等等。

響應體:最主要的部分,包含了請求資源的內容,如網頁HTML、圖片二進制數據等。

能抓取哪些數據

網頁文本:如HTML文檔、Json格式文本等。

圖片:獲取到的是二進制文件,保存爲圖片格式。

視頻:同爲二進制文件,保存爲視頻格式便可。

And so on:只要是能請求到的,都能獲取。

解析方式

  1. 直接處理
  2. Json解析
  3. 正則表達式
  4. BeautifulSoup
  5. PyQuery
  6. XPath

抓取中出現的問題

問:爲何我抓到的和瀏覽器看到的不同?

答:網頁經過瀏覽器的解析,加載CSS與JS等文件對網頁進行解析渲染,達到咱們看到絢麗的網頁,而咱們抓到的文件只是一些代碼,css文件沒法調用,使得樣式不能表現出來,那麼網頁就會出現錯位等等問題。

問:怎樣解決JavaScript渲染的問題?

答:分析Ajax請求、Selenium/WebDriver、Splash、PyV八、Ghost.py等庫

保存數據

文本:純文本、Json、Xml等。

關係型數據庫:如MySQL、Oracle、SQL Server等具備結構化表結構形式存儲。

非關係型數據庫:如MongoDB、Redis等Key-Value形式存儲。

二進制文件:如圖片、視頻、音頻等等直接保存成特定格式便可。

以上就是本文的所有內容,但願對您有所幫助!

若是你們在學習Python的路上,或者打算學習Python須要學習資料,能夠看小編簡介,小編這裏的學習資料免費贈送給你們。

本文來自網絡,若有侵權,請聯繫小編刪除!

相關文章
相關標籤/搜索