04-爬蟲的基本原理

  概述:有了前面的基礎,本篇就來看看爬蟲的基本原理吧!html


  蟲子有不少種,爲何咱們把爬蟲看作蜘蛛呢?由於咱們能夠把網頁看作網的節點,把網頁之間的連接關係看作節點之間的連線。這樣是否是很像蜘蛛網?爬蟲爬過一個節點後,又能夠順着節點連線爬到下一個節點(經過連接獲取其餘網頁),周而復始,就能爬到全部節點。前端

 

1、爬蟲的基本概念

  簡單來講,爬蟲就是獲取網頁,從中提取信息保存數據自動化程序。正則表達式

1. 獲取網頁

  咱們說的「獲取網頁」,就是指獲取網頁的源代碼。數據庫

  咱們前面講過,向網站服務器發送一個請求,返回的響應體就是網頁源代碼。那麼這部分的關鍵就是,如何構建一個請求併發給服務器,而後接收並解析響應。瀏覽器

  咱們能夠利用 Python 提供的庫(如 urllib、requests 等)來實現 HTTP 請求操做,請求和響應均可以用類庫提供的數據結構來表示,獲得相應以後,咱們只須要解析數據結構中的 Body 部分便可(這就是源代碼)。服務器

2. 提取信息

  拿到源代碼後,就要分析源代碼,從中提取有用數據。經常使用方法有兩種:數據結構

  • 正則表達式:萬能方法,但比較複雜,容易出錯。
  • 使用庫文件:有些庫文件能夠根據網頁節點屬性、CSS 選擇器或 XPath 來提取網頁信息(如 Beautiful Souppyquerylxml 等)。這些庫能夠高效快速地提取數據。

3. 保存數據

  提取到有用信息後,須要保存數據,以供後續使用。一般作法有如下三種:併發

  • 保存爲 txt 或 JSON 文本
  • 保存到 MySQL、MongoDB 等數據庫
  • 保存至遠程服務器(藉助 SFTP 等)

4. 自動化

  爬蟲能夠自動在抓取過程當中進行異常處理、錯誤重試等操做,自動化程度高,尤爲適用於數據量大、對速度要求高的使用場景。app

 

2、爬蟲能抓什麼數據

  只要是基於 HTTP 或 HTTPS 協議,具備對應的 URL 的數據,都可以抓取模塊化

1. HTML 代碼

  最多見的常規網頁對應 HTML 代碼,這也是咱們最常抓取的內容。

2. JSON 字符串

  有些網頁返回的不是 HTML 代碼,而是 JSON 字符串。API 接口大多采用這樣的形式。

3. 二進制數據

  如圖片、音頻、視頻等。

4. 各類擴展名的文件

  如 CSS、JavaScript、配置文件等。

 

3、JavaScript 渲染頁面

  有時咱們使用 urllib 或 requests 抓取到的網頁源代碼和實際在瀏覽器中看到的不同。這是由於如今的網頁愈來愈多地採用 Ajax 和前端模塊化工具來狗圈,網頁多是由 JavaScript 渲染出來的,原始的 HTML 代碼只是一個空殼。

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="UTF-8」>
 5 <title>This is a Oemo</title>
 6 </head>
 7 <body>
 8 <div id=」container」 >
 9 </div>
10 </body>
11 <script src=」app.js ></script>
12 </html>

  以上代碼的 body 中,只有一個 id 爲 container 的節點,可是 body 後飲用了 app.js,它負責整個網站的渲染。瀏覽器打開這個頁面時,首先加載 HTML 內容,接下來瀏覽器發現引入了 app.js 文件,因而繼續請求這個文件。獲取到文件後,執行其中的 JavaScript 代碼,由此改變 HTML 的節點,向其中添加內容,獲得完整界面。

  使用 urllib 或 requests 庫請求頁面時,只能獲得 HTML 代碼,不會繼續加載 JavaScript 文件,天然也就沒法看到瀏覽器中的內容了。

  因爲使用基本 HTTP 請求庫獲得的源代碼和瀏覽器中的頁面源代碼不一致,咱們能夠分析其後臺 Ajax 接口,也可使用 Selenium、Splash 等庫來實現模擬 JavaScript 渲染。

相關文章
相關標籤/搜索