乾貨分享!Python網路爬蟲實戰

yingpu618發表於2020-08-07

爬蟲在工作生活中使用非常廣泛,無論是論文資料準備還是市場調查等等都十分使用,今天開始更新爬蟲系列,此係列旨在總結回顧常用爬蟲技巧以及給大家在日常使用中提供較為完整的技術參考。在進行正式的爬蟲之前有必要熟悉以下爬蟲的基本概念,例如爬蟲的基本原理、網路通訊原理以及Web三件套的相關知識等。

爬蟲在工作生活中使用非常廣泛,無論是論文資料準備還是市場調查等等都十分使用,今天開始更新爬蟲系列,此係列旨在總結回顧常用爬蟲技巧以及給大家在日常使用中提供較為完整的技術參考。在進行正式的爬蟲之前有必要熟悉以下爬蟲的基本概念,例如爬蟲的基本原理、網路通訊原理以及Web三件套的相關知識等。

一、爬蟲原理

網路爬蟲是一種從網頁上抓取資料資訊並儲存的自動化程式。如果我們把網際網路比作一張大的蜘蛛網,資料便是存放於蜘蛛網的各個節點,而爬蟲就是一隻小蜘蛛(程式),沿著網路抓取自己的獵物(資料)。下面簡要介紹一下爬蟲的基本概念與流程:

1.獲取網頁

網路爬蟲第一步首先是通過一定的方式獲取網頁。所謂獲取網頁可以簡單理解為在本地發起一個伺服器請求,伺服器則會返回給我們網頁的原始碼,其中通訊的底層原理較為複雜,而Python給我們封裝好了urllib庫和requests庫等,這些庫可以讓我們非常簡單的傳送各種形式的請求。

2.提取資訊

網頁的原始碼包含了非常多的資訊,而想要進一步的獲取我們的想要的資訊則需要對原始碼中的資訊進行進一步的提取。此時我們可以選用python中的re庫即通過正則匹配的形式去提取資訊,也可以採用BeautifulSoup庫(bs4)等解析原始碼,除了有自動編碼的優勢之外,bs4庫還可以結構化輸出原始碼資訊,更易於理解與使用。

3.儲存資料

在提取到網頁原始碼中我們想要的資訊之後則需要在python中將它們儲存起來,可以使用通過內建函式open儲存為文字資料等,也可以通過第三方庫儲存為其它形式的資料,例如可以通過pandas庫儲存為常見的xlsx資料,如果有圖片等非結構化資料還可以通過pymongo庫儲存至非結構化資料庫中。

4.自動化程式

在經過前三步即ETL(Extract-Transform-Load)過程之後就可以將我們的爬蟲程式碼有效地組織起來構成一個爬蟲自動化程式,以至於需要相同或相似資料的時候可以高效複用。

二、HTTPS

1.URL

介紹URL之前首先說一下URI。URI(uniform resource identifier)是統一資源識別符號,用來唯一的標識一個資源。而URL是uniform resource locator,統一資源定位器,它是一種具體的URI,即URL可以用來標識一個資源,而且還指明瞭如何定位這個資源。

2.HTTPS

HTTPS可以理解為HTTP的加密形式。HTTP代理(HyperText Transfer Protocol,超文字傳輸協議)是一個簡單的請求-響應協議,它通常執行在TCP之上。它指定了客戶端可能傳送給伺服器什麼樣的訊息以及得到什麼樣的響應。HTTPS (全稱:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全為目標的 HTTP 通道,在HTTP的基礎上通過傳輸加密和身份認證保證了傳輸過程的安全性。HTTPS 在HTTP 的基礎下加入SSL 層,HTTPS 的安全基礎是 SSL,因此加密的詳細內容就需要 SSL,上文中的連結即為HTTPS連結。

3.請求與響應

http請求過程可分為以下幾個部分:建立TCP連線,瀏覽器向伺服器傳送請求命令,伺服器應答,伺服器關閉TCP連線以及瀏覽器接受到伺服器響應的資料。

 

爬蟲所要了解的基礎知識,這一篇就夠了!Python網路爬蟲實戰系列

首先開始我們第一個請求,例如我們在谷歌瀏覽器中輸入上述連結開啟百度搜尋官網,按F12鍵開啟Devtools開發工具,再重新整理以下網頁可以發現開發工具中彈出諸多響應資訊:

下面的選項卡中,Elements為元素皮膚,檢視Web頁面的HTML與CSS,最重要的是可以雙擊元素,對當前頁面進行修改;Console為控制檯皮膚,JavaScript輸出資訊的控制檯;Source為原始碼皮膚,我們在這個頁面對JS程式碼進行除錯,可設定斷點;NetWork為網路皮膚,可以明確的檢視到訪問Web頁面所產生的全部請求(包括應答狀態、響應時間、資料量等資訊)和下載的資原始檔;Performance、Memory、Application、Security、Audits分別為效能皮膚、記憶體皮膚、應用皮膚、安全皮膚、審計皮膚;我們主要就是利用NetWork皮膚的資訊進行網路資料採集。

顯示的檔案資訊中,Name代表請求的名稱,一般為URL的最後一部分;Status代表響應的狀態碼,一般為200,代表響應是正常;Type為請求的文件型別,例如第一個為Document文件格式;Initiator為請求源,用來標記請求是由哪個物件或程式發起的;Size是從伺服器下載的檔案和請求的資源大小;Time為發起請求到獲取響應所用的總時間;Waterfall列則展示網路請求的視覺化瀑布流。

爬蟲所要了解的基礎知識,這一篇就夠了!Python網路爬蟲實戰系列

三、Web三件套

Web網頁可以分為HTML、CSS和JavaScript三個部分。如果把網頁比作一個人的話,HTML相當於骨架,JavaScript相當於肌肉,CSS相當於皮膚,三者結合起來才能形成一個完善的網頁。下面我們分別來介紹一下這三部分的功能。

1.HTML

超文字標記語言(英語:HyperText Markup Language,簡稱:HTML)是一種用於建立網頁的標準標記語言。您可以使用 HTML 來建立自己的Web站點,HTML 執行在瀏覽器上,由瀏覽器來解析。例如下面即為一個簡單的表單HTML:

將該程式碼複製到html檔案中再在谷歌瀏覽器中開啟檔案,會發現谷歌瀏覽器已經將其解析為一個表單頁面:

2.Javascript

JavaScript(簡稱“JS”) 是一種具有函式優先的輕量級,解釋型或即時編譯型的程式語言。雖然它是作為開發Web頁面的指令碼語言而出名的,但是它也被用到了很多非瀏覽器環境中,JavaScript 基於原型程式設計、多正規化的動態指令碼語言,並且支援物件導向、命令式和宣告式(如函數語言程式設計)風格。例如再次開啟百度搜尋的Devtools後臺開發頁面,進入Elements選項卡檢視原始碼,即可發現JavaScript程式碼,負責網頁的行為。

 

層疊樣式表(Cascading Style Sheets)是一種用來表現HTML(標準通用標記語言的一個應用)或XML(標準通用標記語言的一個子集)等檔案樣式的計算機語言。CSS不僅可以靜態地修飾網頁,還可以配合各種指令碼語言動態地對網頁各元素進行格式化。CSS 能夠對網頁中元素位置的排版進行畫素級精確控制,支援幾乎所有的字型字號樣式,擁有對網頁物件和模型樣式編輯的能力。

 

相關文章