Scrapy基礎(一) ------學習Scrapy以前所要了解的

技術選型:    

Scrapy vs requsts+beautifulsoup
    1,reqests,beautifulsoup都是庫,Scrapy是框架
    2,Scrapy中能夠加入requests beautifulsoup
    3,Scrapy基於twisted,異步IO框架,性能最大的優點
    4,Scrapy 擴展方便,提供了許多內置功能
    5,內置css和xpath selector(都是c寫的)很是方便,beautifulsoup(是純python寫的缺點就是慢)css

 

網頁分類 

    1,靜態網頁
    2,動態頁面
    3,webservice(restapi)python

 

爬蟲能作什麼    

   

    1,搜索引擎,百度google,垂直領域的搜索引擎
    2,推薦引擎,--今日頭條
    3,機器學習的數據樣本
    4,數據分析,金融分析web

 

正則表達式   

  1,爲何學習正則表達式

        精細化提取
    2,基礎內容
        特殊字符
            1)
              ^:^b 必須以b開頭
              . : 表明任意字符
              * :前面出現的字符任意屢次    
              $ : b$ 必須以b結尾的
              ? :非貪婪匹配模式,儘可能少的匹配
              + :前面出現的字符出現(1,+00)
              {2} : 前面的字符出現了兩次
              {3,}:前面的字符出現了最少3次
              {2,5} : 前面的字符出現了2-5次
                |   : 數線 或的關係,先提取前面的
            2)   
              []  :  [abc] 從abc中都選一個均可以;[0-9a-Z]區間;[.]進入[]中的.*等沒特殊意義;
                      [^1] 排除1的均可以匹配
              手機號: "1[48357][0-9]{9}"

            3)
              \s : 空格
              \S : 只要不是空格就匹配了
              \w : 等價於[a-zA-Z0-9_]
              \W : 除了[a-zA-Z0-9_]都匹配

            4)
               [\u4E00-\u9FA5] :值提取中文
               \d  : 數字


體會一下非貪婪匹配:
    匹配boooobby 中的boooob


算法

1 import re
2 a = "aaboooobby123"
3 match_obj = re.match(".*?(b.*?b).*",a)
4 if match_obj:
5     print(match_obj.group(1)) #輸出匹配子串1
6 #  ".*(b.*b).*"   -->  bb   貪婪匹配,從左邊開始匹配或者
7 #說從右邊開始找到最後一個符合條件的
8 #  ".*?(b.*b).*"  -->  boooobb 括號中是貪婪匹配,直至找到最後一個b
9 #".*?(b.*?b).*"   -->  boooob  都是非貪婪匹配

 

網站的深度優先和廣度優先        

  深度優先:數據庫

    對於二叉樹,先考慮一邊,往深了尋找
        Scrapy 默認也是深度優先,遞歸算法實現
    
     廣度優先:api

    優先兄弟節點而不是子節點;按每層遍歷
        經過隊列形式實現框架

URL去重:    

1,將URL報存到數據庫,麻煩,慢    2,保存到set中,只須要O(1)代價就能查詢URL
    可是:一億 100000000*2byte*50個字符/1024/1024=9G
    小型爬蟲一億很少
    3,url 通過md5等方法哈希後保存到set中
    Scrapy採用的就是此;可將字符縮短到固定通常長度16個byte
    4,bitmap方法將訪問的URL經過hash函數映射到某一位
    缺點:衝突可能性較大
    5,bloomfilter方法對bitmap進行改進,多重hash函數下降衝突

機器學習

相關文章
相關標籤/搜索