爬蟲基礎---HTTP協議理解、網頁的基礎知識、爬蟲的基本原理


一、HTTP協議的理解

URL和URI

在學習HTTP之前我們需要了解一下URL、URI(精確的說明某資源的位置以及如果去訪問它)

URL:Universal Resource Locator 統一資源定位符,描述了一台特定服務器上某資源的特定位置。

URI :Uniform Resource Identifier 統一資源標識符,URI有兩種表現形式URL和URN。

HTTP和HTTPS

我們經常會在URL的首部會看到http或者https,這個就是訪問資源需要的協議類型,除了http和https還有ftp,sftp,smb等。在爬蟲中,我們常用的就是http和https。

http:HyperText Transfer Protocol 超文本傳輸協議是互聯網上應用最為廣泛的一種網絡協議。所有的www文件都要遵守這個標准。HTTP是一個客戶端和服務器端請求和應答的標准,它使用socke基於TCP建立的,所以http是可靠的數據傳輸協議,由於它是短鏈接的,也就是一次請求,一次響應斷開,所以它表現處無狀態的現象。目前廣泛使用的是 HTTP 1.1 版本。

https : Hyper Text Transfer Protocol over Secure Socket Layer是以安全為目標的 HTTP 通道,簡單講是HTTP的安全版,即 HTTP 下加入 SSL 層,簡稱為 HTTPS。HTTPS的安全基礎是SSL,所以他傳輸的內容都是經過SSL加密的,它的主要作用:

  1. 建立一個信息安全通道,來保證數據的傳輸安全
  2. 確認網站的真實性,凡是使用了 https 的網站,都可以通過點擊瀏覽器地址欄的鎖頭標志來查看網站認證之后的真實信息,也可以通過 CA 機構頒發的安全簽章來查詢。

HTTP和HTTPS的區別:

  1. https協議需要到ca申請證書,一般免費證書很少,需要交費.
  2. http是超文本傳輸協議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協議。
  3. http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
  4. http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

 HTTP請求流程

一次HTTP操作稱為一個事務,其工作過程可分為4步:

首先,在瀏覽器地址欄(或點擊一個超鏈接)HTTP的工作就開始了

建立連接后,客戶端向服務器端發送一個請求:

請求首行:請求方式 請求協議  協議版本
\r\n
請求頭    鍵值組成的
\r\n\r\n
如果是post請求的話,還有一個請求體
請求體
formData

服務器接受到請求后,給其響應:

響應首航 : 協議類型和版本 響應狀態碼  狀態碼描述符  
\r\n
響應頭
\r\n\r\n
響應體

客戶端瀏覽器接受響應之后,在用戶的瀏覽器渲染顯式。

然后客戶端和服務器端斷開連接。

二、網頁的基礎知識

網頁的組成可分為三大部分:HTML CSS JavaScript。HTML負責語義,CSS負責樣式,Javascript負責交互和行為。

HTML:

HTML 是用來描述網頁的一種語言,其全稱叫做 Hyper Text Markup Language,即超文本標記語言。

我們可以通過Chrome 瀏覽器中打開一個網址,右鍵單擊審查元素或按 F12 打開開發者模式,切換到 Elements 選項卡即可看到網頁的源代碼。

菜鳥教程:http://www.runoob.com/html/html-tutorial.html

w3cshool: http://www.w3school.com.cn/

CSS:

CSS,全稱叫做 Cascading Style Sheets,即層疊樣式表。“層疊”是指當在 HTML 中引用了數個樣式文件,並且樣式發生沖突時,瀏覽器能依據層疊順序處理。“樣式”指網頁中文字大小、顏色、元素間距、排列等格式。

JavaScript:

JavaScript,簡稱為 JS,是一種腳本語言,HTML 和 CSS 配合使用,提供給用戶的只是一種靜態的信息,缺少交互性。我們在網頁里可能會看到一些交互和動畫效果,如下載進度條、提示框、輪播圖等,這通常就是 JavaScript 的功勞。

網頁的基本結構:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>HelloWorld</title>
</head>
<body>
    <p>HelloWorld</p>
    <div class="content">
        主體內容
    </div>
</body>
</html>

一般網頁形式,首行標識html版本,兩個html包裹head和body,head通常放一些配置和一些資源引用,body是網頁的主體內容。

節點之間的關系

在網頁中,組織頁面的對象被渲染成一個樹形結構,用來表示文檔中對象的標准模型稱為DOM,文檔對象模型(Document Object Model,簡稱DOM)。

表示和處理一個HTML或XML文檔的常用方法。

DOM實際上是以面向對象方式描述的文檔模型。DOM定義了表示和修改文檔所需的對象、這些對象的行為和屬性以及這些對象之間的關系。可以把DOM認為是頁面上數據和結構的一個樹形表示,不過頁面當然可能並不是以這種樹的方式具體實現。

 

 節點:根據DOM,HTML 文檔中的每個成分都是一個節點。

DOM 是這樣規定的:
整個文檔是一個文檔節點
每個 HTML 標簽是一個元素節點
包含在 HTML 元素中的文本是文本節點
每一個 HTML 屬性是一個屬性節點
注釋屬於注釋節點

節點層次:

HTML 文檔中的所有節點組成了一個文檔樹(或節點樹)。HTML 文檔中的每個元素、屬性、文本等都代表着樹中的一個節點。樹起始於文檔節點,並由此繼續伸出枝條,直到處於這棵樹最低級別的所有文本節點為止。

舉例,<head> 和 <body> 的父節點是 <html> 節點,文本節點 "Hello world!" 的父節點是 <p> 節點。

大部分元素節點都有 子節點。比方說,<head> 節點有一個子節點:<title> 節點。<title> 節點也有一個子節點:文本節點 "DOM Tutorial"。
當節點分享同一個父節點時,它們就是 同輩(同級節點)。比方說,<div> 和 <p>是同輩,因為它們的父節點均是 <body> 節點。
 
詳細內容參考   DOM百度百科: https://baike.baidu.com/item/DOM/50288

三、 爬蟲的基本原理

網絡爬蟲(又被稱為網頁蜘蛛)是一種按照一定的規則,自動抓取萬維網信息的程序或者腳本。

獲取網頁->提取信息->保存數據

獲取網頁

爬蟲的首要工作就是獲取網頁源代碼,然后從中提取我們想要的數據。

在python中,提供了許多庫來幫助我們實現這個操作,如 Urllib、Requests 等,我們可以用這些庫來幫助我們實現 HTTP 請求操作,Request 和 Response 都可以用類庫提供的數據結構來表示,得到 Response 之后只需要解析數據結構中的 Body 部分即可,即得到網頁的源代碼,這樣我們可以用程序來實現獲取網頁的過程了。

提取信息

我們獲取網頁源代碼后,接下來的工作就是分析網頁源代碼,從中提取我們想要的數據,最通用的方法就是使用正則表達式,但是使用正則表達式比較復雜。在Python中,如 BeautifulSoup、PyQuery、LXML 等,使用這些庫可以高效的從源代碼中提取網頁信息。

保存數據

提取信息之后,我們可以將數據保存到本地,以便后續使用,保存方式有很多種,比如TXT,Json也可以保存到數據庫中,如Mysql,MangoDB等。

動態渲染頁面的抓取

現在越來越多的網頁使用js來構建網頁,所以我們經常使用requests等獲取的網頁源代碼和瀏覽器看到的不同,使用requests,我們只能得到靜態的HTML源代碼,他不會幫我們去加載js文件,我們可以借助Selenium、Splash 這樣的庫來實現模擬 JavaScript 渲染,這樣我們便可以爬取 JavaScript 渲染的網頁的內容了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM