技術選型
Scrapy VS requests+beautifulsoup
- requests和bs都是庫,Scrapy是框架。
- scrapy框架可以加入requests和bs。
- scrapy是基於twisted,性能是最大的優勢。
- scrapy方便擴展,提供了很多內置的功能。
- scrapy內置的css和xpath selector非常方便,bs最大的缺點就是慢
爬蟲能做什么?
- 搜索引擎----百度、google、垂直領域搜索引擎
- 推薦引擎----今日頭條、一點資訊
- 機器學習的數據樣本
- 數據分析(如金融數據分析)、輿情分析。
正則表達式
-
特殊字符 (原始字符串'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 數字 -
正則表達式的運用
略,上網練習
網頁分類
- 靜態網頁
- 動態網頁
- webservice(restapi)
深度優先和廣度優先
- 網站的樹結構
- 深度優先算法和實現----遞歸
- 廣度優先算法和實現----隊列
爬蟲去重策略
-
將訪問過的url保存到數據庫中。
-
將訪問過的url保存到set中,只要o(1)【這是常數階時間復雜度】的代價就可以查詢url
100000000x2bytex50個字符/1024/1024/1024≈9G 一億條數據,一條50字符
-
url經過md5等方法哈希后保存到set中(比較常用)
-
........
字符串編碼
-
計算機只能識別數字,文本轉換為數字才能處理。計算機中8個bit作為一個字節,所以一個字節能表示最大的數字就是255.
-
計算機是美國人發明的,所以一個字節可以表示所有字符了,所以ASCII(一個字節)編碼就成為美國人標准編碼。
-
但是ASCII處理中文明顯是不夠的,中文不止255個漢字,所以中國制定了GB2312編碼,用兩個字節表示一個漢字。GB2312還把ASCII包含進去了,同理,日文,韓文等等上百個國家為了解決這個問題就都發展了一套字節的編碼,標准就越來越多,如果出現多種語言混合就一定會出現亂碼。
-
於是unicode出現了,將所有語言統一到一套編碼里。
-
ASCII和unicode編碼:
(1)字母A用ASCII編碼十進制65,二進制01000001
(2)漢字‘中’已超多ASCII編碼的范圍,用unicode編碼是20013,二進制01001110 00101101
(3)A用unicode編碼中只需要前面補0,二進制是 00000000 01000001
-
亂碼問題解決可,但是如果內容全是英文,unicode編碼比ASCII需要多一倍的存儲空間,同時如果傳輸需要多一倍的傳輸。
-
所以出現了可變長的編碼“utf-8”,把英文變長一個字節,漢字3個字節。特別生僻的變成4-6字節。如果傳輸大量的英文,utf-8作用就很明顯。

作者:今孝
出處:http://www.cnblogs.com/jinxiao-pu/p/6707830.html
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
