Python網絡爬蟲學習手記(1)——爬蟲基礎

1、爬蟲基本概念

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

簡單的說,爬蟲就是獲取目標網頁源代碼,並提取和保存網頁信息的自動化程序或者腳本。網絡爬蟲腳本或者程序一般包含如下幾個步驟:

A.獲取網頁源代碼

爬蟲首要的任務就是獲取需要爬取的目標網頁,也就是網頁源代碼,一般網頁源代碼就是一系列HTML代碼

B.提取信息

得到了網頁源代碼後,接下來就是分析該HTML代碼,按照一定的規則或者方法,從中提取我們想要的數據

C.保存數據

提取了想要的數據後,一般需要將我們爬取到的數據保存到某個地方,如最簡單的方式就是保存到本地爲txt、json格式的文件,更高級的就是搭建數據庫服務,如MySQL等,將數據存儲到數據庫中

D.整合成可執行程序或者腳本

用於快速自動爬取大量數據,並處理爬取過程中各種異常、錯誤等操作,確保爬取的高效運行

2、HTTP原理和網頁基礎

上面對於爬蟲的基本介紹知道,爬蟲就是爬取網頁源代碼並提取信息的過程,那麼我們需要了解一些基本的網頁基礎知識、HTTP原理等。

     2.1、 HTTP基本原理

       在我們訪問一個網頁站點時,首先都是在瀏覽器輸入一段URL,然後才能訪問該網站。什麼是URL?URL全稱是:Universal Resource Locator,即統一資源定位符,可以從互聯網上得到的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。包括了訪問的協議http(https)、訪問路徑和資源名稱、端口號等,如https://www.baidu.com。

HTTP全稱:Hyper Text Transfer Protocol,中文譯爲超文本傳輸協議。HTTP協議用於從網絡傳輸超文本數據到本地瀏覽器,並保證高效而準確地傳送超文本文檔,而HTML源代碼就是一種超文本標記語言。該協議是由萬維網和互聯網工作小組聯合制定的,目前廣泛使用的版本是HTTP1.1。除了HTTP外還有HTTPS,就是HTTP的安全版,通過HTTPS傳輸的內容都是經過SSL加密的,保證數據傳輸的安全。如我們購票用的網站:https://www.12306.cn/,就是這樣的站點。

     2.2、 HTTP請求過程

 我們在瀏覽器輸入一個URL站點,回車後正常就能在瀏覽器中看到網站頁面內容。實際上,這個過程是瀏覽器向所在的服務器發送了一個請求,告訴服務器需要請求什麼東西,服務器收到請求後進行處理和解析這個請求,如果處理解析這個請求OK,那麼就返回給瀏覽器對應的響應。響應中包含了頁面的源代碼等內容,瀏覽器再對響應中的源代碼進行解析,最後將解析後的網頁呈現出來。其大概過程就是:瀏覽器請求》服務器處理解析》服務器響應並傳給瀏覽器》瀏覽器解析呈現網頁。

下面通過實際的網絡站點,學習HTTP請求和響應的過程,以及過程中都發生了怎樣的網絡請求。以Chrome瀏覽器訪問百度站點:https://www.baidu.com/爲例。

 打開Chrome瀏覽器,鼠標右鍵菜單選擇【檢查】或者直接快捷鍵【F12】打開開發者工具,切換到【Network】。在瀏覽器中輸入百度站點:https://www.baidu.com/,回車後,看看發生的網絡請求。如下圖:

 

 其中第一條網絡請求:www.baidu.com,就是瀏覽器向百度服務器發送的一條請求訪問百度站點的請求,點擊這個請求,即可看到請求的詳細信息和內容。

首先是General部分,描述了請求的URL、請求的方法、響應狀態碼以及遠程服務器的地址和端口;

在往下,就是Response Headers和Request Headers,分別是響應頭和請求頭。包含了響應和請求的部分相關信息和內容,下面具體看看這個請求和對應的響應都哪些內容。

請求的組成

請求由客戶端即瀏覽器向服務端發送,發送的請求有4個方面的內容:請求方法(Request Method)、請求的站點(Request  URL)、請求頭(Request  Headers)、請求體(Request Body)

1.請求的方法

常見的請求有get,post,put...類型。get類型的接口一般是指獲取信息的接口,比如列表查詢的功能,點擊查詢按鈕就調用一個get接口,然後把信息返回出來。就是指把內容從服務器(後端)拉下來。Post類型一般是提交表單的功能,比如註冊、導入數據之類的就是post接口。就是指把內容推到服務器(後端)上去。

2.請求的站點

請求的網站,就是在瀏覽器輸入的一段URL網址

3.請求頭

請求頭用來說明服務端使用的附件信息,也就是HTTP協議規定的附加內容,必須按照協議規則辦事。如下圖訪問百度站點的請求頭信息:

 

 看看請求頭信息的相關字段說明

Accept:請求報頭域,用來指定客戶端可接受哪些類型的信息,如上圖可以接受text/html等類型的信息

Accept-Encoding和Accept-Language:指定客戶端可接受的編碼和語言

Connection:連接狀態

Cookie:存儲的Cookie信息,主要用於維持當前會話

Host:需要訪問的站點地址

User-Agent:用於向服務端識別客戶使用的操作系統和瀏覽器版本等信息

4.請求體

請求體一般是承載着POST類型請求的表單數據,GET類型的請求體爲空

響應的組成

響應由服務端返回給瀏覽器的信息,響應的內容有3個方面:響應狀態碼(Response Status Code)、響應頭(Response Headers)和響應體(Response Body)

1.響應狀態碼

響應狀態碼錶示服務器對於請求信息的處理結果,如200表示響應正常、404表示頁面未找到、500表示服務器出錯等

 2.響應頭

響應頭包含了服務端對請求的應答信息,如下圖的響應頭信息:

 

看看響應頭相關關鍵字段說明

Content-Type:文檔類型,指定返回的文檔是什麼,如text/html表示返回的是HTML文檔

Server:服務器的信息,如服務器名稱、版本等

Set-Cookie:設置Cookie

Expires:指定響應的過期時間

3.響應體

就是網頁的HTML源代碼,點擊【Preview】頁籤就可以看到網頁的源代碼

 

2.3、 網頁構成

 現代化的網頁呈現給我們的總是絢麗多彩的,有着豐富的視覺感受,不同網頁上面往往有着諸多各式各樣樣子,並搭配合理的排版、豐富的圖片、動畫效果等。那麼這些網頁是怎麼構成的?構成網頁主要有三大部分:HTML、CSS、JavaScript,其中HTML構成了網頁的基礎架構,CSS確定了網頁的排版樣式,JavaScript決定了網頁的可塑造性和動態呈現。下面具體看看這三大部分:

1.HTML

HTML:全稱Hyper Text Markup Language,即超文本標記語言。網頁上的文字、段落、圖片、按鈕等元素就是由HTML定義,如img標籤表示圖片,p標籤表示段落等等,在Chrome瀏覽器打開百度站點,右擊鼠標菜單中選擇【檢查】或者直接【F12】打開開發者工具在【Elements】選項欄就可以看到網頁的HTML源代碼,如下圖:

 

可以看到網頁HTML源代碼,每個標籤對定義了一個節點和節點的屬性,他們構成了一個HTML樹。這些節點標籤對陳列在HTML樹中,它們存在的一定的層級關係,常用父節點、子節點和同級節點表示。具體對於HTML的學習,可以參考W3School網站學習:http://www.w3school.com.cn/html/index.asp

2.CSS

CSS:全稱Cascading Style Sheets,即層疊樣式表。CSS用來確定網頁頁面的排版樣式的標準,指定了網頁中文字的大小、顏色、位置等屬性。如下圖定位到【百度一下】這個按鈕,查看樣式:

 

該CSS樣式確定該按鈕的width、height,即寬和高的像素大小,以及文字顏色color:white等信息,按鈕背景色:backgroud

3.JavaScript

JavaScript就是JS,一種腳本語言,用來將JS文件嵌入到HTML代碼中提供交互式的動態效果,如提示框、輪播圖、下載進度條等等。其在HTML的標籤對是由script標籤對來定義

綜上所述,HTML定義了網頁的內容和結構,CSS則描述了網頁元素的佈局渲染和位置效果,JavaScript定義了網頁的交互性和動畫效果,這三個構成了豐富網頁呈現的基礎架構。

在瞭解了爬蟲基本概念和HTTP協議以及網頁基本構成後,基於這些方面的認知,再開始學習如何爬取網站並提取信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章