1. 程式人生 > >第二章 python分散式爬蟲打造搜尋引擎環境搭建 第一節爬蟲基礎知識介紹

第二章 python分散式爬蟲打造搜尋引擎環境搭建 第一節爬蟲基礎知識介紹

第一,爬蟲能做什麼?作用是啥?簡單的介紹幾種,以便於瞭解。

1. 搜尋引擎---百度、google、垂直領域搜尋引擎

2. 推薦引擎---今日頭條

3. 機器學習的資料樣本

4. 資料分析(如金融資料分析)、輿情分析等

第二,技術選型(為什麼要使用scrapy而不是requests+beautifulsoup?

1. requestsbeautifulsoup都是庫, scrapy是框架

2. scrapy框架中可以加入requestsbeautifulsoup

3. scrapy基於twisted, 效能是最大的優勢

4. scrapy方便擴充套件, 提供了很多內建的功能

5. scrapy內建的cssxpath selector非常方便, beautifulsoup最大的缺點就是慢

第三,網頁分類

1. 靜態網頁

2. 動態網頁

3.webservice(restapi)

第四,爬蟲的第一步就是網站的結構解析,只有清楚瞭解了網站的結構才能很好的進行資料的爬取。以伯樂網為例子,分析網站的結構,如下圖:

第四,爬蟲常使用的演算法有哪些?下面使用同一組圖來解析對比兩鍾演算法。發現了一篇這個演算法分析寫的很清晰的一篇文章,有需要大家可以移步到此部落格檢視

1.深度優先演算法和實現

   深度優先輸出

ABDEICFGH(遞迴實現)

  演算法的虛擬碼如下:

def  depth_ tree(tree node) :
     if  tree_ node  is  not None :
          print (tree_ node._ data)
          if  tree_ node._ left  is not None :
              return depth_ tree(tree_ node._ left)
          if  tree_ node._ right  is  not None :
              return depth_ tree(tree_ node._ right )

2.廣度優先演算法和實現

 廣度優先輸出 ABCDEFGHI

  演算法的虛擬碼如下:

def level_ queue(root) :
      "利用佇列實現樹的廣度有先遍歷"
    if root is None:
       return
    my_ _queue = [ ]node = root
    my_ queue . append(node)
    While my_ _queue:
        node = my_ .queue .pop(O)
        print (node.elem)
        if node.lchild is not None:
            my_ queue . append(node . lchild)
        if  node. rchild is not None :
            my_ queue . append (node. rchild)

第五,資料爬取策略

1. url拼接分析(適用於所有資料的列表頁和搜尋關鍵詞的獲取)

2. 通用爬蟲(廣度優先和深度優先實現)

第六,爬蟲更新策略

1. 根據網站權重分配爬蟲資源

2. 根據last-modify-datecontent-length欄位判斷

3. 對網站內容做一個指紋

第七,爬蟲去重策略

1. 將訪問過的url儲存到資料庫中

2. 將訪問過的url儲存到set中,只需要o(1)的代價就可以查詢url(100000000*2byte*50個字元/1024/1024/1024 = 9G)

3. url經過md5等方法雜湊後儲存到set

4.用bitmap方法, 將訪問過的url通過hash函式對映到某一位

 

 

 

 

 

 

 

 

5. bloomfilter方法對bitmap進行改進, 多重hash函式降低衝突

這塊都是給了個大致的思路,裡面具體每一點的瞭解,還請各位仔細檢視資料學習!