第3章 爬蟲基礎知識回顧


技術選型

Scrapy VS requests+beautifulsoup

  1. requests和bs都是庫,Scrapy是框架。
  2. scrapy框架可以加入requests和bs。
  3. scrapy是基於twisted,性能是最大的優勢。
  4. scrapy方便擴展,提供了很多內置的功能。
  5. scrapy內置的css和xpath selector非常方便,bs最大的缺點就是慢

爬蟲能做什么?

  1. 搜索引擎----百度、google、垂直領域搜索引擎
  2. 推薦引擎----今日頭條、一點資訊
  3. 機器學習的數據樣本
  4. 數據分析(如金融數據分析)、輿情分析。

正則表達式

  1. 特殊字符 (原始字符串'booby123')

     ^ 開頭	'^b.*'----以b開頭的任意字符
    
     $ 結尾	'^b.*3$'----以b開頭,3結尾的任意字符
    
     * 任意長度(次數),≥0		
     
     ? 非貪婪模式,非貪婪模式盡可能少的匹配所搜索的字符串	'.*?(b.*?b).*'----從左至右第一個b和的二個b之間的內容(包含b)
    
     + 一次或多次
     
     {2} 指定出現次數2次
    
     {2,} 出現次數≥2次
    
     {2,5} 出現次數2≤x≤5
    
     | 或		例如,“z|food”能匹配“z”或“food”(此處請謹慎)。“[z|f]ood”則匹配“zood”或“food”或"zood"。
    

    .

     [] 中括號中任意一個符合即可(中括號里面沒有分轉義字符)	'[abc]ooby123'----只要開頭符合[]中任意一個即可
    
     [^] 只要不出現[]的即可
    
     [a-Z] 從小a到大Z		'1[48357][0-9]{9}'----電話號碼
    
     . 任意字符
    

    .

     \s 匹配不可見字符 \n \t	'你\s好'----可以匹配‘你 好’
    
     \S 匹配可見字符,即普通字符
    
     \w 匹配下划線在內的任何單詞字符
    
     \W 和上一個相反
    

    .

     [\u4E00-\u9FA5] 只能匹配漢字
    
     () 要取出的信息就用括號括起來
    
     \d 數字
    
  2. 正則表達式的運用

    略,上網練習

網頁分類

  1. 靜態網頁
  2. 動態網頁
  3. webservice(restapi)

深度優先和廣度優先

  1. 網站的樹結構
  2. 深度優先算法和實現----遞歸
  3. 廣度優先算法和實現----隊列

爬蟲去重策略

  1. 將訪問過的url保存到數據庫中。

  2. 將訪問過的url保存到set中,只要o(1)【這是常數階時間復雜度】的代價就可以查詢url

    100000000x2bytex50個字符/1024/1024/1024≈9G 一億條數據,一條50字符

  3. url經過md5等方法哈希后保存到set中(比較常用)

  4. ........

字符串編碼

  1. 計算機只能識別數字,文本轉換為數字才能處理。計算機中8個bit作為一個字節,所以一個字節能表示最大的數字就是255.

  2. 計算機是美國人發明的,所以一個字節可以表示所有字符了,所以ASCII(一個字節)編碼就成為美國人標准編碼。

  3. 但是ASCII處理中文明顯是不夠的,中文不止255個漢字,所以中國制定了GB2312編碼,用兩個字節表示一個漢字。GB2312還把ASCII包含進去了,同理,日文,韓文等等上百個國家為了解決這個問題就都發展了一套字節的編碼,標准就越來越多,如果出現多種語言混合就一定會出現亂碼。

  4. 於是unicode出現了,將所有語言統一到一套編碼里。

  5. ASCII和unicode編碼:

    (1)字母A用ASCII編碼十進制65,二進制01000001

    (2)漢字‘中’已超多ASCII編碼的范圍,用unicode編碼是20013,二進制01001110 00101101

    (3)A用unicode編碼中只需要前面補0,二進制是 00000000 01000001

  6. 亂碼問題解決可,但是如果內容全是英文,unicode編碼比ASCII需要多一倍的存儲空間,同時如果傳輸需要多一倍的傳輸。

  7. 所以出現了可變長的編碼“utf-8”,把英文變長一個字節,漢字3個字節。特別生僻的變成4-6字節。如果傳輸大量的英文,utf-8作用就很明顯。

作者:今孝

出處:http://www.cnblogs.com/jinxiao-pu/p/6707830.html

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM