python爬蟲中url管理器去重操作例項

2022-09-26 11:18:08 字數 1512 閱讀 8135

當我們需要有一批貨物需要存放時,最好的方法就是有乙個倉庫進行保管。我們可以把url管理器看成乙個收集了資料的大倉庫,而**器就是這個倉庫貨物的搬運者。關於**器的問題,我們暫且不談。本篇主要討論的是在url管理器中,我們遇到重複的資料應該如何識別出來,避免像倉庫一樣過多的囤積相同的貨物。聽起來是不是很有意思,下面我們一起進入今天的學習。

如果乙個url管理器能夠具有以上4點功能,也算是「麻雀雖小,五臟俱全」了。然而,鏈結去重這個功能,應該怎麼實現?

鏈結去重是關係爬蟲效率的乙個比較關鍵的點,尤其是爬取的資料量極大的時候。在這個簡單的例子裡,由於資料量較少,我們不需要太過複雜的演算法,直接借助於python的set()函式即可,該函式可以生成乙個集合物件,其元素不可重複。

根據以上分析,url管理器的w**如下:

'''urlmanager

c程式設計客棧lass urlmanager(object):

def __init__(self):

#初始化的時候就生成兩個url倉庫

self.new_urls = set()

self.old_urls = set()

#判斷新url倉庫中是否還有沒有爬取的url

def has_new_url(self):

return len(self.new_urls)

#從new_url倉庫獲取乙個新的url

def get_new_url(self):

return self.new_urls.pop()

def add_new_url(self, url): #這個函式後來用不到了……

'''將一條url新增到new_urls倉庫中

parm url: str

return:

if url is none:

return

#只需要判斷old_urls中沒有該鏈結即可,new_urls在新增的時候會自動去重

if url not in self.old_urls:

self.new_urls.add(url)

def add_new_urls(self, urls):

將多條url新增到new_urls倉庫中

parm url: 可迭代物件

print "start add_new_urlprncwjjks"

if urlprncwjjks is none or len(urls) == 0:

for url in urls:

self.add_new_url(url)

def add_old_url(self, url):

self.old_urls.add(url)

print "add old url succefully"

#獲取已經爬取過的url的數目

def old_url_size(self):

return len(self.old_urls)

嘗試過以上**的小夥伴,已經成功學會用url管理器篩選重複的資料了。相信大家經過今程式設計客棧天的學習,已經能夠了解url的基本功能和簡單的使用。

爬蟲學習 URL管理器和實現方法

url管理器一共有三種實現方法,作為個人,我們應當選擇哪種實現方法呢?答案就在下面 爬蟲的簡單架構 一 url管理器 實現方式 有三種 1.記憶體中 python中set 可以直接去除重複的元素 2.關聯式資料庫中 比如 mysql中的urls url,is crawled 建立乙個urls表包含兩...

11 URL管理器實現

管理待抓取的url集合和已抓取的url集合,管理器 防止重複抓取 防止迴圈抓取,管理器最小功能範圍如下 建立set集合 def init self 空集合 set 空 代表dict self.new url set self.old url set 編寫乙個方法,新增url defadd url s...

Python 包管理器

剛開始學習python時,在看文件和別人的blog介紹安裝包有的用easy install,setuptools,有的使用pip,distribute,那麼這幾個工具有什麼關係呢,看一下下面這個圖就明白了 可以看到distribute是setuptools的取代,pip是easy install的取...