1. 程式人生 > >爬蟲基礎(http請求和html結構)

爬蟲基礎(http請求和html結構)

要使用selenium還是使用其他方式抓取網頁的內容,都必須對網頁的架構比較熟悉。我們來看看如何定位網頁的內容。

http的請求和響應

我們下面用Chrome為例來講解抓包,windows下用F12來調出開發者模式來審查網頁元素。

注意看到點選network;下面一欄選擇Preserve log來保留跳轉時之前的日誌。

第一列 Name :請求的名稱,一般會將 URL 的最後一部分內容當作名稱。 第二列 Status :響應的狀態碼,這裡顯示為 200 , 代表響應是正常的 。 通過狀態碼,我們可以判斷髮送了請求之後是杏得到了正常的響應 。 第三列 Type : 請求的文梢型別 。 這裡為 document,代表我們這次請求的是一個 HTML 文件,內容就是一些 HTML 程式碼 。 第四列 Initiator : 請求源。 用來標記請求是由哪個物件或程序發起的 。 第五列 Size : 從伺服器下載的檔案和請求的資源大小。 如果是從快取中取得的資源,則該列會顯示from cache。 第六列Time : 發起請求到獲取響應所用的總時間 。 第七列Watefall : 網路請求的視覺化瀑布流。

ps:這裡重點講解一下Preserve log。有時候你點選一個連結。瀏覽器發出n個請求,然後跳轉到了另外一個頁面。這個時候有進行了一個新的請求。勾選這個選項工具就會儲存你跳轉之前的請求。

1.請求

點選ALL檢視所有的網路請求。可以看到左下角共有18項請求。而其實我開啟的這個網頁只是www.baidu.com.

點選選擇第一個請求。一般來說第一個請求是主頁面的請求。頁面就會變成這樣。

      由客戶端向服務端發出,可以分為 4 部分內容:請求方法( Request Method ) 、 請求的網址( Request URL )、請求頭( Request Headers ) 、 請求體( Request Body )。

1.請求方法:

2.請求網址:

請求的網址,即統一資驚定位符 URL ,它可以唯一確定我們想請求的資源。

3.請求頭:

請求頭,用來說明伺服器要使用的附加資訊,比較重要的資訊有 Cookie 、 Referer 、 User-Agent 等 。 下面簡要說明一些常用的頭資訊 。 Accept :請求報頭域,用於指定客戶端可接受哪些型別的資訊 。 Accept-Language :指定客戶端可接受的語言型別 。 Accept-Encoding :指定客戶端可接受的內容編碼 。 Host :用於指定請求資源的主機 IP 和埠號,其內容為請求 URL 的原始伺服器或閘道器的位置。 從 HTTP 1. l 版本開始,請求必須包含此內容。

Cookie :也常用複數形式 Cookies ,這是網站為了辨別使用者進行會話跟蹤而儲存在使用者本地的資料 。 它的主要功能是維持當前訪問會話 。 例如,我們輸入使用者名稱和密碼成功登入某個網站後,伺服器會用會話儲存登入狀態資訊,後面我們每次重新整理或請求該站點的其他頁面時,會發現都是登入狀態,這就是 Cookies 的功勞 。 Cookies 裡有資訊標識了我們所對應的伺服器的會話,每次瀏覽器在請求該站點的頁面時,都會在請求頭中加上 Cookies 並將其傳送給伺服器,伺服器通過 Cookies 識別出是我們自己,並且查出當前狀態是登入狀態,所以返回結果就是登入之後才能看到的網頁內容 。

Referer :此內容用來標識這個請求是從哪個頁面發過來的,伺服器可以拿到這一資訊並做相應的處理,如做來源統計、防盜鏈處理等 。 User-Agent :簡稱 UA ,它是一個特殊的字串頭,可以使伺服器識別客戶使用的作業系統及版本 、 瀏覽器及版本等資訊 。 在做爬蟲時加上此資訊,可以偽裝為瀏覽器;如果不加,很可能會被識別州為爬蟲 。

Content-Type :也叫網際網路媒體型別( Internet Media Type )或者 MIME 型別,在 HTTP 協議訊息頭中,它用來表示具體請求中的媒體型別資訊 。 例如, text/html 代表 HTML 格式,image/gif代表 GIF 圖片, app lication/jso n 代表 JSON 型別,更多對應關係可以檢視此對照表 :http://tool.oschina.neνcommons 。因此,請求頭是請求的重要組成部分,在寫爬蟲時,大部分情況下都需要設定請求頭 。

4.請求體:

請求體-般承載的內容是 POST 請求中的表單資料,而對於 GET 請求,請求體則為空 。

  在爬蟲中,如果要構造 POST 請求,需要使用正確的 Content-Type ,並瞭解各種請求庫的各個引數設定時使用的是哪種 Content-Type , 不然可能會導致 POST 提交後無法正常響應 。

2.響應

      響應,由服務端返回給客戶端,可以分為三部分:響應狀態碼( Response Status Code )、響應頭( Response Headers )和響應體( Response Body )。 1. 晌應狀態碼       響應狀態碼錶示伺服器的響應狀態,如 200 代表伺服器正常響應, 404 代表頁面未找到, 500 代表伺服器內部發生錯誤。 在爬蟲中,我們可以根據狀態碼來判斷伺服器響應狀態,如狀態碼為 200 ,則證明成功返回資料 , 再進行進一步的處理,否則直接忽略。 表 2-3 列州了常見的錯誤程式碼及錯誤原因

1xx:指示資訊--表示請求已接收,繼續處理

2xx:成功--表示請求已被成功接收、理解、接受

3xx:重定向--資訊不完整需要進一步補充

4xx:客戶端錯誤--請求有語法錯誤或請求無法實現

5xx:伺服器端錯誤--伺服器未能實現合法的請求

具體錯誤程式碼可以找度娘問。。。。。。

2. 晌應頭 響應頭包含了伺服器對請求的應答資訊,如 Content-Type 、 Server 、 Set-Cookie 等。 下面簡要說明一些常用的頭資訊 。 Date : 標識響應產生的時間 。 Last-Modified : 指定資源的最後修改時間 。 Content-Encoding : 指定響應 內容的編碼 。 Server : 包含伺服器的資訊 ,比如名 稱 、版本號等 。 Content-Type : 文件型別 ,指定返回的資料型別是什麼 ,如 text/htm l 代表返回 HTML 文件, application/x-javascript !J!U代表返回 JavaScript 檔案, image/jpeg 則代表返回圖片 。 Set-Cookie : 設定 Cookies 。 響應頭 中的 Set-Cooki e 告訴瀏覽器需要將此內容放在 Cookies 中 , 下次請求攜帶 Cookies 請求 。 Expires: 指定響應的過期時間 , 可以使代理伺服器或瀏覽器將載入的 內容更新到快取巾 。 如 果再次訪問時,就可 以直接從快取中載入, 降低伺服器負載,縮短載入時間 。 3 . 晌應體     最重要的當屬響應體的內容了 。 響應的正文資料都在響應體中,比如請求網頁時,它的響應體就是網頁的 HTML 程式碼 ; 求一張圖片時 , 它的響應體就是圖片的二進位制資料 。 我們做爬蟲請求網頁後,要解析的 內容就是響應體 ,如圖 2-8 所示 。

html結構

1.網頁的組成

      網頁可 以分為三大部分HTML , CSS 和 JavaScript。 如果把網頁 比作一個人的話 ,HTML 相當於骨架,JavaScript 相當於肌肉 ,css 相當於面板,三者結合起來才能形成一個完善的網頁 。 下面我們分別來介紹一下這三部分的功能。 1. HTML       HTML 是用來描述網頁的一種語言 , 其全稱叫作 Hyper Text Markup Language ,即超文字標記語言 。 網頁包括文字、按鈕、圖片和視訊等各種複雜的元素,其基礎架構就是 HTML 。 不同型別的文字通過不同型別的標籤來表示 ,如圖片用 img 標籤表示, 視訊用 video標籤表示 ,段落用 p 標籤表示 ,它們之間的佈局又常通過佈局標籤 div 巢狀組合而戚 ,各種標籤通過不同的排列和巢狀才形成了網頁的框架。

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>This is a Demo</title> </head> <body> <d iv id=” container”> <div class=、rapper”〉 <h2 class =”title ”>Hello World</h2> <p class =” text ”> Hell口, this is a paragraph.</p> </div> </div > </body> </html>

ps:常見的標籤 <div> 標籤定義 HTML 文件中的一個分隔區塊或者一個區域部分。

<span> 元素是內聯元素,可用作文字的容器。

無序列表始於 <ul> 標籤。每個列表項始於 <li>。

自定義列表以 <dl> 標籤開始。每個自定義列表項以 <dt> 開始。每個自定義列表項的定義以 <dd> 開始。

2. CSS    HTML 定義了網頁的結構,但是隻有 HTML 頁面的佈局並不美觀,可能只是簡單的節點元素的排列,為了讓網頁看起來更好看一些,這裡藉助了 css 。css ,全稱叫作 Cascading Style Sheets ,即層疊樣式表 。 “層疊”是指當在 HTML 中引用了數個樣式檔案,並且樣式發生衝突時,瀏覽器能依據層疊順序處理。 “樣式”指網頁中文字大小 、 顏色 、元素間距、排列等格式。 css 是目前唯一的網頁頁面排版樣式標準,有了它的幫助,頁面才會變得更為美觀。圖 2-9 的右側即為 css ,例如: #head_wrapper.s-ps-islite .s-p-top { position: absolute; bottom: 40px; width: 100%; height: 181px; 就是一個 css 樣式 。 大括號前面是一個 css 選擇器。 此選擇器的意思是首先選中 id 為 head_wrapper且 class 為 s-ps-islite 的節點,然後再選中其內部的 class 為 s-p-top 的節點 。 大括號內部寫的就是一條條樣式規則,

例如 position 指定了這個元素的佈局方式為絕對佈局,

bottom 指定元素的下邊距為40 畫素,

width 指定了寬度為 100% 佔滿父元素,

height 則指定了元素的高度 。

也就是說,我們將位置 、 寬度、高度等樣式配置統一寫成這樣的形式,然後用大括號括起來,接著在開頭再加上 css 選擇 器,這就代表這個樣式對 css 選擇器選中的元素生效,元素就會根據此樣式來展示了 。在網頁中,一般會統一定義整個網頁的樣式規則,並寫人 css 檔案中(其後綴為 css )。 在 HTML中,只需要用 link 標籤即可引人寫好的 css 檔案,這樣整個頁面就會變得美觀 、 優雅。

3. JavaScript JavaScript ,簡稱 JS , 是一種指令碼語言 。 HTML 和 css 配合使用, 提供給使用者的只是一種靜態資訊,缺乏互動性。 我們在網頁裡可能會看到一些互動和動畫效果,如下載進度條、提示框 、 輪播圖等 ,這通常就是 JavaScript 的功勞。 它的出現使得使用者與資訊之間不只是一種瀏覽與顯示的關係,而是實現了一種實時、動態、互動的頁面功能 。JavaScript 通常也是以單獨的檔案形式載入的,字尾為 js ,在 HTML 中通過 script 標籤即可引入,例如: <script src: "jquery-2 .1. o.j s" ></script> 綜上所述, HTML 定義了網頁的內容和結構, css 描述了網頁的佈局, JavaScript 定義了網頁的行為 。 以上就是html的基礎。以後會講解如何使用xpath和css,正則式來定位頁面元素。歡迎交流[email protected]