《Python3網絡爬蟲開發實戰》筆記 第2章 爬蟲基礎

搞了一大輪環境配置,終於開始學習爬蟲的基礎知識了!

2.1、 HTTP基本原理

         URI: Uniform Resource Identifier 統一資源標誌符

         URL:   Universal Resource Locatior   統一資源定位符

         URL是URI的子集,,每個URL都是URI,但不是每個URI都是URL。URI還包括一個子類叫URN,統一資源名稱

         超文本: 網頁的源代碼HTML。

         HTTP和HTTPS:

         HTTP: 超文本傳輸協議: 用於從網絡傳輸超文本數據到本地瀏覽器的傳送協議,能保證高交嶴準確地傳送超文本文檔。

         HTTPS: 以安全爲目標的HTTP通道。 即HTTP下加入SSL層。建立一個信息安全通道來保證數據傳輸的安全,並確認網站的 真實性。(在地址欄有個鎖頭標誌來表示,也可以通過CA機構頒發的安全簽章來查詢)

        若要爬取HTTPS站點,就需要設置忽略證書的選項,否則會提示SSL鏈接錯誤。

         HTTP請求過程

         瀏覽器向網站所在服務器發送一個請求,網站服務器接收到這個請求後進行處理和解析,然後返回對應的響應,接着傳回給瀏覽器。 

          可以通過瀏覽器的開發者工具的網絡功能來觀察網絡請示如何發生,有以下這些指標:

          Name: 請求的名稱

          Status: 響應的狀態碼, 200爲正常

          Type:    請求的文檔類型

          Intiator:    請求源, 用來標記請求是由哪個對象或進程發起的。

          Size:    從服務器下載的文件和請求的資源大小

           Time:   發起請求到獲取響應的所用的總時間。

         Waterfall: 網絡請求的可視化瀑布流

         更詳細的信息

          General:   Request URL爲請求的URL, Request Method爲請求的方法, Status Code爲響應狀態碼, Remote Address爲遠程服務器的地址和端口

          Response Headers: 響應頭

          Request Headers:  請求頭

         請求 : 由客戶端向服務器端發出,可以分爲4部分內容

         1)請求方法: GET和POST,GET請求參數直接包含在URL中,最多隻有1024字節;POST與表單一起提交。

              其他請求方法:

               GET,請求頁面;

               HEAD,用於獲取報頭;

               POST,用於提交表單或上傳文件,數據包在請求體中;

               PUT,從客戶端向服務器傳送的數據取代指定文檔中的內容;

               DELETE,請求服務器刪除指定頁面;

               CONNECT,把服務器當作跳板,讓服務器代替客戶端訪問其他網頁;

               OPTIONS,允許客戶端查看服務器的性能;

                TRACE,回顯服務器收到的請求,主要用於測試或診斷。

       2)請求網址 URL 

       3)請求頭 用來說明服務器要使用的附加信息。

             Accept:  請求報頭域,用於指定客戶端可接受哪些類型的信息

             Accept-Language:  指定客戶端可接受的語言類型

             Accept-Encodeing: 指定客戶端可接受的內容編碼

             Host: 用於指定請求資源的主機IP和端口號,其內容爲請求URL的原始服務器或網關的位置。

             Cookie:網站爲辨別用戶進行會話跟蹤面存儲在用戶本地的數據, 主要功能是維持當前訪問會話。

              Referer:  用來標識這個請求是從哪個頁面發過來的,服務器可作爲來源統計、防盜鏈處理。

             User-Agent:可以使用服務器識別客戶使用的操作系統及版本、瀏覽器及版本等信息。在做爬蟲時加上此信息,可僞裝爲瀏覽器,否則,會被識別出爬蟲。

              Content-Type: 互聯網媒體類型或MIME類型,表示具體請求中的媒體類型信息,例如: text/html, image/gif等

              請求頭是請求的重要組成部分,在寫爬蟲時,大部分情況下都需要設定請求頭。

         4)請求體: 一般承載的內容是POST請求中的表單數據,而對於GET請求,請求體則爲空。

               Request Headers中指定Content-Type爲application/x-www-form-urlencoded,纔會以表單數據的形式提交。

               application/x-www-form-urlencoded                                       表單數據

               multipart/form-data                                                                  表單文件上傳

               application/json                                                                        序列化JSON數據

               text/xml                                                                                    XML數據 

       響應:由服務器端返回客戶端,分爲三部分:響應狀態碼、響應頭和響應體

        1) 響應狀態碼: 表示服務器的響應碼, 200表示正常響應,404表示網頁未找到;500代表服務器內部發生錯誤。

        2) 響應頭: 包含了服務器對請求的應答信息

            Date: 標識響應產生的時間

            Last-Modified:  指定資源的最後修改時間

            Content-Encoding:  指定響應內容的編碼

            Server: 包含服務器的信息

            Content-Type:  文檔類型,指定返回的數據類型是什麼

            Set-Cookie   設置Cookies

             Expires: 指定響應的過期時間

        3)響應體  最重要的內容, 做爬蟲請求網頁後,要解析的內容就是響應體。

          

2.2 網頁基礎

       網頁組成: 網頁由HTML、CSS和JavaScript三大部分組成。

       網頁結構:一個網頁的標準形式是html標籤內嵌head和body標籤, head內定義網頁的配置和引用, body內定義網頁的正文。

       在HTML中,所有標籤定義的內容都是節點,它們構成一個HTML DOM樹。DOM(Document Object Model 文檔對象模型)。

       DOM標準初分爲3個不同的部分:

       核心DOM: 針對任何結構化文檔的標準模型

       XML DOM: 針對XML文檔的標準模型

       HTML DOM:  針對HTML文檔的標準模型

       整個文檔是一個文檔節點,每個HTML元素是元素節點,HTML元素內的文本是文本節點,每個HTML屬性是屬性節點,註釋是註釋節點。

       選擇器

        在CSS中,我們使用CSS選擇器來定位節點, CSS選擇器還支持嵌套選擇,各個選擇器之間加個空格分隔開便可以代表嵌套關係。

 

2.3 爬蟲的基本原理

         爬蟲就是獲取網頁並提取和保存信息的自動化程序。

        1、獲取網頁:獲取網頁的源代碼,從源代碼中獲取有用信息,向服務器發送一個請求,返回的響應體就是網頁源代碼。最關鍵的部分是構造一個請求併發送給服務器,然後接收到響應並將其解析出來。可通過Python提供的urlllib、requests等來實現。

        2、提取信息:獲取網頁源代碼後,接下來就分析源代碼,從中提取想要的數據,通過採用正則表達式提取,通過CSS選擇器或XPath來提取網頁信息的庫(BeautifulSoup、pyquery、lxml等)提取網頁信息。

        3、保存數據:將提取的信息,以TXT或JSON文本保存,或保存到數據庫。

        4、自動化程序:爬蟲可以代替人來完成這些操作。

        能抓怎樣的數據: HTML代碼、JSON字串、二進制數據(圖片、視頻和音頻)、CSS和Javascript文件。

        對於Javascript渲染頁面的內容,或通過ajax後臺調用,可使用Selenium和Splash來模擬Javascript渲染。

       

 2.4 會話和Cookies     

          很多網站需要實現用戶註冊和登錄後纔可以看到需要的內容,這種登錄憑證是會話和Cookies共同產生的結果。

          無狀態HTTP:指HTTP協議對事務處理是沒有記憶能力的,也就是說服務器不知道客戶端是什麼狀態。服務器完成響應後,就不會記錄前後狀態的變化。

           爲解決無狀態HTTP,保持HTTP連接狀態,分別使用會話和Cookies,會話在服務端,也就是網站的服務器,用來保存用戶的會話信息;Cookies在客戶端或瀏覽器端,瀏覽器在下次訪問時會自動附帶上Cookies發送給服務器,服務器通過識別Cookies並鑑定哪個用戶,然後再判斷用戶是否是登錄狀態,然後返回對應的響應。

            會話: 在Web中,會話對象用來存儲特定用戶會話所需的屬性及配置信息。在Web頁之間跳轉時,存儲在會話對象中的變量將不會丟失。

           Cookies: 指某些網站爲了辨別用戶身份,進行會話跟蹤而存儲在用戶本地終端上的數據。

          會話維持:利用Cookies保持狀態,

           1)客戶端第一次請求服務器時,服務器會返回一個請求頭中帶有Set-Cookie字段的響應給客戶端,用來標記是哪一個用戶,並保存起來。

          2)下一次再請求該網站,瀏覽器會把Cookies放到請求頭一起提交給服務器,Cookies攜帶會話ID信息,服務器檢查該Cookies即可找到對應的會話是什麼,然後再判斷會話來以此辨認用戶狀態。

          Cookies和會話需要配合,一個處於客戶端,一個處於服務端,二者共同協作就實現登錄會話控制。

          Cookies屬性結構
          Name: Cookies名稱

          Value: Cookies的值, 值爲Unicode字符,需要爲字符編碼;值爲二進制數,則使用BASE64編碼。

         Domain:可以訪問該Cookies的域名

         Expires/Max Age: Cookies失效時間,

         Path:  Cookies使用路徑。

        Size:Cookies的大小

        HTTP字段:Cookies的httponly屬性, true時只有HTTP頭中會帶有Cookies信息。

        Secure: 該Cookies是否僅被使用安全協議傳輸。即HTTPS和SSL。

        對於會話,除非程序通知服務器刪除,否則服務器會一直保留該會話。由於服務器爲會話設置一個失效時間,當客戶端上一次使用會話的時間超過這個失效時間,服務器就認爲客戶端已停止了活動,纔會把會話刪除以節省存儲空間。

 

2.5 代理的基本原理

         由於網站可能採取一些反爬蟲措施,使在爬蟲時會出現錯誤,所以使用代理來實現IP僞裝。

         基本原理:

         代理指的是代理服務器, proxy server,代理網絡用戶去取得網絡信息。本機通過代理服務器訪問Web服務器,然後Web服務器又通過代理服務器將返回的響應轉發給本機,而Web服務器識別的真實IP地址就不是本機的IP地址,成功實現IP僞裝。

         代理的作用:突破自身IP訪問限制、訪問一些單位或團體內部資源、提高訪問速度、隱藏真實IP。

         爬蟲代理:在爬取過程中通過不斷更換代理,就不會被封鎖。

         代理分類:

                根據協議區分: FTP代理服務器、HTTP代理服務器、SSL/TLS代理、RTSP代理、Telnet代理、POP3/SMTP代理和SOCKS代理。

                 根據匿名程序區分:高度匿名代理、普通匿名代理、透明代理和間諜代理。

           常見代理設置: 使用網上的免費代理、使用付費代理服務、ADSL拔號

 

         

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