在爬蟲程式中, 用到了廣度優先搜尋(bfs)演算法. 這個演算法用到的資料結構就是佇列.
低效率的, 因為list在隊首使用 pop(0) 和 insert() 都是效率比較低的, python官方建議使用
collection.deque
來高效的完成佇列任務.
from collections import deque
queue = deque(["eric", "john", "michael"])
queue.popleft() # 隊首元素出隊
#輸出: 'eric'
queue.popleft() # 隊首元素出隊
#輸出: 'john'
queue # 佇列中剩下的元素
#輸出: deque(['michael', 'terry', 'graham'])
在爬蟲程式中, 為了不重複爬那些已經爬過的**, 我們需要把爬過的頁面的url放進集合中, 在每一次要爬某乙個url之前, 先看看集合裡面是否已經存在. 如果已經存在, 我們就跳過這個url; 如果不存在, 我們先把url放入集合中, 然後再去爬這個頁面.
python提供了set這種資料結構. set是一種無序的, 不包含重複元素的結構. 一般用來測試是否已經包含了某元素, 或者用來對眾多元素們去重. 與數學中的集合論同樣, 他支援的運算有交, 並, 差, 對稱差.建立乙個set可以用 set() 函式或者花括號 {} . 但是建立乙個空集是不能使用乙個花括號的, 只能用 set() 函式. 因為乙個空的花括號建立的是乙個
字典資料結構. 以下同樣是python官網提供的示例.
>>> print(basket) # 這裡演示的是去重功能
>>> 'orange' in basket # 快速判斷元素是否在集合內
true
>>> 'crabgrass' in basket
false
>>> # 下面展示兩個集合間的運算.
...>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a
>>> a - b # 集合a中包含元素
>>> a | b # 集合a或b中包含的所有元素
>>> a & b # 集合a和b中都包含了的元素
>>> a ^ b # 不同時包含於a和b的元素
在爬蟲程式中, 爬回來的資料是乙個字串, 字串的內容是頁面的html**. 我們要從字串中, 提取出頁面提到過的所有url. 這就要求爬蟲程式要有簡單的字串處理能力, 而正規表示式可以很輕鬆的完成這一任務.
python正規表示式
python 爬蟲學習二
是一種按照一定的規則,自動地抓取 資訊的程式或者指令碼。爬蟲是通過網頁的鏈結位址來尋找網頁,從 某乙個頁面開始,讀取網頁的內容,找到在網頁中的其它鏈結位址,然後通過這些鏈結位址尋找下乙個網頁,這樣一直迴圈下去,直到把這個 所有的網頁都抓取完為止。基本流程 1 發起請求 通過http庫向目標站點傳送r...
Python 爬蟲學習(二)
這一篇我們來學習如何對多頁的網路進行資訊爬取。在平時網頁瀏覽時不少看見許多網頁是有多頁的,像這樣 當我們不斷換頁時,我們會發現什麼呢?沒錯,看破真相的是乙個外表看似小孩,智慧型卻過於常人的.第三頁 第四頁 第五頁 def get info url,data none wb data requests...
python爬蟲要用到的庫總結
python爬蟲要用到的庫 請求庫 實現 http 請求操作 觀點www.cppcns.com擴充套件 學習爬蟲,最初的操作便是模擬瀏覽器向伺服器發出請求,那麼我們需要從哪個地方開始做起呢?請求需要我們自己來構造嗎?需要關心請求這個資料結構的實現嘛?需要了解http tcp ip層的網路傳輸通訊嗎?...