第二章 python分散式爬蟲打造搜尋引擎環境搭建 第一節爬蟲基礎知識介紹
第一,爬蟲能做什麼?作用是啥?簡單的介紹幾種,以便於瞭解。
1. 搜尋引擎---百度、google、垂直領域搜尋引擎
2. 推薦引擎---今日頭條
3. 機器學習的資料樣本
4. 資料分析(如金融資料分析)、輿情分析等
第二,技術選型(為什麼要使用scrapy而不是requests+beautifulsoup?)
1. requests和beautifulsoup都是庫, scrapy是框架
2. scrapy框架中可以加入requests和beautifulsoup
3. scrapy基於twisted, 效能是最大的優勢
4. scrapy方便擴充套件, 提供了很多內建的功能
5. scrapy內建的css和xpath selector非常方便, beautifulsoup最大的缺點就是慢
第三,網頁分類
1. 靜態網頁
2. 動態網頁
3.webservice(restapi)
第四,爬蟲的第一步就是網站的結構解析,只有清楚瞭解了網站的結構才能很好的進行資料的爬取。以伯樂網為例子,分析網站的結構,如下圖:
第四,爬蟲常使用的演算法有哪些?下面使用同一組圖來解析對比兩鍾演算法。發現了一篇這個演算法分析寫的很清晰的一篇文章,有需要大家可以移步到此部落格檢視!
1.深度優先演算法和實現
深度優先輸出
演算法的虛擬碼如下:
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.廣度優先演算法和實現
廣度優先輸出 A、B、C、D、E、F、G、H、I
演算法的虛擬碼如下:
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-date、content-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函式降低衝突
這塊都是給了個大致的思路,裡面具體每一點的瞭解,還請各位仔細檢視資料學習!