爬蟲之靜態網頁爬蟲(基礎知識)

1.環境搭建-Python Unix                               基礎環境-Windowscss

  1.pip,並設置pip源                                1.直接下載Anaconda,不少比較難以安裝的資源都已經包含了html

   配置pip conf,自動設置源                             配置pip源,各個系統默認pip.ini位置不一樣,須要根據實際狀況設置前端

    #mkdir ~/.pip/                                   官網:http://anaconda.org/web

    #vim~/.pip/pip.conf                                下子主頁:https://www.continuum.io/downloads算法

    [global]數據庫

    index-url=http://pypi.tuna.tsinghua.edu.cn/simple編程

  也能夠每次安裝的時候制定sourcevim

    #pip install -i http://pypi.tuna.tsinghua.edu.cn/simple xlml瀏覽器

2.http協議服務器

  物理層:電器鏈接

  數據鏈路層:交換機(能夠爲接入交換機的任意兩個網絡節點提供獨享的電信號通路)、

        STP(生成樹協議,能夠應用於在網絡中創建樹形拓撲,消除網絡中的二層環路,而且能夠經過必定的方法實現路徑冗餘)、

        幀中繼(公共或專用網上的局域網互聯等,是一種數據包交換通訊網絡)

  網絡層:路由器、IP協議

  傳輸層:TCP、UDP協議

  會話層:創建通訊鏈接、網絡撥號

  表示層:每次鏈接只處理一個請求

  應用層:HTTP、FTP

  (無鏈接:每次鏈接只處理一個請求)

  (無狀態:每次鏈接傳輸都是獨立的)

3.HTTP HEADER(header)

  REQUEST(request)部分的HTTP HEADER                              RESPONSE(response)部分的HTTP HEADER

  Accept:text/plain                                           Accept-Patch:text/example;charset=utf-8 

  Accept-Charset:utf-8                                         Cache-Control:max-age=3600

  Accept-Encoding:gzip,deflate                                      Content-Encoding:gzip

  Accept-Language:en-US                                         Last-Modified:Tue,15 Nov 1994 12:46:13 GMT

  Connection:keep-alive                                           Content-Language:da

  Content-length:348                                          Content-Length:348

  Content-type:application/x-www-form-urlencoded                             ETag:" 737060cd8c284d8af7ad3082f209582d"

  Date:Tue,15Nov,1994 08:15:48 GMT                                   Expires:Thu,01 Dec 1994 16:00:00 GMT

  Host:en.wikipedia.org:80                                        Location:http://www.w3.org/pub/WWW/people.html  

  User-Agent:Mozilla/5.0(x11;Linux x86-64;rv:12.0)Gecko/20100101 Firefox/21.0               Set-Cookie:UserID=JohnDoe;Max-Age=3600;Version=1             

  Cookie:$Version=1;Skin=new;                                      Status:200 OK

4.keep-alive

  HTTP是一個 請求<->響應 模式的典型範例,即客戶端向服務器發送一個請求信息,服務器來響應這個信息。在老的HTTP版本中,每一個請求都將被建立一個新的 客戶端<->服務器 的鏈接,在這

  個鏈接上發送請求,而後接受請求。這樣的模式有一個很大的優勢,比較簡單,很容易理解和編程實現;但也有一個很大的缺點,就是效率比較低,所以keep-Alive被踢出來用來解決效率低問題。

  keep-Alive功能使客戶端到服務器端的鏈接持續有效,當出現對服務器的後繼請求時,keep-Alive功能避免了創建或者從新創建鏈接。

  http/1.1

  默認狀況下所在HTTP1.1中全部鏈接都被保持,除非在請求頭或響應頭中指明要關閉:Connection:Close

5.HTTP請求方法

    

6.HTTP響應狀態碼

  2xx  成功

  3xx  跳轉

  4xx  客戶端錯誤

  500  服務器錯誤

  http響應狀態碼300

    1.300 Multiple Choices   存在多個可用的資源,可處理或丟棄

    2.301 Moved Permanetly  重定向(經過各類方法將各類網絡請求從新定個方向跳轉到其它位置)

    3.302 Found        重定向

    4.304 Not Modified    請求的資源未更新,丟棄

  一些Python庫,例如urllib2已結對重定向作了處理,會自動跳轉;動態網頁處理的時候,也是自動跳轉,因此不須要單獨處理

  http響應狀態碼400、500                                             錯誤處理:   

    1.400 Bad Request  客戶端請求有語法錯誤,不能被服務器所理解                      400  檢查請求的參數或路徑

    2.401 Unauthorized  請求未經受權,這個狀態碼必須和WWW-Authenticate報頭域一塊兒使用            401     若是須要受權的網頁。嘗試從新登陸

    3.403 Forbidden    服務器收到請求,但拒絕提供服務                           403  若是須要登陸的網站,嘗試從新登陸;IP被封,暫停爬取,並增長爬蟲的等待時間,若是撥號網絡,嘗試從新聯網更改IP

    4.404 Not Found   請求資源不存在,例如:輸入錯誤的URL                          404  直接丟棄                     

    5.500 Internal Server Error    服務器發生不可預測的錯誤                            5xx  服務器錯誤,直接丟棄,並技數,若是連續不成功,WARNING並中止爬取

    6.503 Server Unavailable  服務器當前不能處理客戶端的請求,一段時間後可能恢復正常

7.HTML

  HTML是超文本標記語言,簡單來講是能夠認爲是一個規範或者協議,瀏覽器根據HTML的語言規範來解析

  在HTML裏,與爬蟲先關的規範有如下:

    這一類tag標記了外鏈用來作抓取,而tr、p用來進行內容抽取

      tag:<a> <tr> <p>

    id、class用在css上的,能幫助咱們定位元素,做用於tr  p相似:

      class:class=:「home-price」

      Id:id=‘price-frame’

8.DOM樹

  DOM樹最重要的做用是用來作網頁數據分析及提取,咱們能夠充分利用TAG、CLASS、ID來找出某一類或某一個元素並提取內容

9.JavaScript

  JavaScript就是運行在前端的編程語言,最典型的用在動態網頁的數據、內容加載及呈現上,JavaScript作網絡請求的時候最經常使用的技術爲AJAX,專門用來異步請求數據,這些數據是咱們抓取的時候要用到的

10.爬蟲的抓取對象類型

    1.靜態網頁

    2.動態網頁

    3.web Service

    4.Web API數據獲取

11.抓取的策略

    1.深度優先策略    2.寬度優先策略

  1.通常選用哪一種策略?

    1.重要的網頁距離種子站點比較近

    2.萬維網的深度並無很深,一個網頁有不少路徑能夠到達

    3.寬度優先有利用多爬蟲並行合做抓取

    4.深度限制與寬度優先相結合

  2.如何記錄抓取歷史?

    1.將訪問過的URL保存到數據庫    #效率過低

    2.用HashSet將訪問過的URL保存起來。那隻需接近O(1)的代價就能夠查到一個URL是否被訪問過了。#消耗內存

    3.URL通過MD5或SHA-1等單向哈希後再保存到HashSet或數據庫

    4.Bit-Map方法,創建一個BitSet,將每個URL通過一個哈希函數映射到某一位。

12.MD5函數

    MD5簽名是一個哈希函數,能夠將任意長度的數據轉化爲一個固定長度的數字(一般是4個整形,128位)。計算機不可能有2的128那麼大的內存,所以實際的哈希表都會是URL,

    MD5再%n(即取模)。現實世界的URL組合必然超越哈希表的槽位數,所以碰撞是必定存在的,通常的HASH函數,例如Java的HashTable是一個HASH表再跟上一個鏈表,鏈表裏

    存的是碰撞結果

      BITMAP記錄方式

        將URL的MD5值再次哈希,用一個或多個BIT位來記錄一個URL

          1.肯定空間大小。例如:Facebook   1.5GB

          2.按倍增長槽位。例如:16GB

          3.HASH算法映射Python:mmh3 bitarray

        優點:對存儲進行了進一步壓縮,在MD5的基礎上,能夠從128位最多壓縮到1位,通常狀況,若是用4bit或者8bit表示一個url,也能壓縮32或者16倍

        缺陷:碰撞機率增長

13.提升效率

    1.評估網站的網頁數量

    2.選擇合適的HASH算法和空間閾值,下降碰撞概率

    3.選擇合適的存儲結構和算法  

14.Bloom Filter

    Bloom Filter使用了多個哈希函數,而不是一個。建立一個m位BitSet,先將全部的位初始化爲0,而後選擇k個不一樣的哈希函數。第i個哈希函數對字符串str哈希的結果

    記錄爲h(i,str),且h(i,str)的範圍是0到m-1。只能插入,不能刪除。

15.如何有效的記錄抓取歷史?

    多數狀況下不須要壓縮,尤爲網頁數量少的狀況

    網頁數量大的狀況下,使用Bloom Filter壓縮

    重點是計算碰撞機率,並根據碰撞機率來肯定存儲空間的閾值

    分佈式系統,將散列映射到多臺主機的內存

16.網站結構分析

    Robots.txt

    網站對爬蟲的限制

    利用sitemap來分析網站結構和估算目標網頁的規模

17.有效抓取特定內容

    利用sitemap裏的信息,直接對目標網頁.html進行抓取

    對網站目錄結構進行分析

    大多數網站都會存在明確的top-down的分類的目錄結構,能夠進入特定的目錄進行抓取

相關文章
相關標籤/搜索