URL 管理器是爬蟲過程中重要的一環(huán),使用它來管理在爬蟲過程中眾多的 URL 地址以免造成重復(fù)獲取爬蟲地址、爬蟲 陷入死循環(huán)等情況的發(fā)生。比如,我們要根據(jù) baidu.com 來進(jìn)行爬蟲,如果在爬蟲的子頁面中也包含 baidu.com 不做處理的話就會(huì)陷入循環(huán),所以說,在爬蟲過程中對(duì) URL 進(jìn)行很好的維護(hù)是非常重要的。
前往 >>?【閱讀全文】
1、創(chuàng)建 url 管理對(duì)象及屬性定義
1#?導(dǎo)入隊(duì)列
2fromcollectionsimportdeque
3
4#?定義?url?管理器類
5classurl_queue():
6def__init__(self):
7#?定義待爬取的隊(duì)列
8self.queue?=?deque()
9#?定義已經(jīng)爬取的集合,使用?set?集合保證去重
10self.set?=?set()
2、將頁面上獲取到的 url?添加到?jīng)]有爬取的隊(duì)列
1defadd_nocrawl_url(self,url):
2'''
3:return:?將爬取的新的?url?添加到未爬取隊(duì)列
4'''
5#?校驗(yàn)?url?是否為?None
6ifurlisNone:
7#?返回?False
8returnFalse
9#?校驗(yàn)?url?是否已經(jīng)存在在已經(jīng)爬取或未被爬取的集合
10elifurlnotinself.queueandurlnotinself.set:
11#?若不存在時(shí),則將該條新的?url?添加到未被爬取的隊(duì)列中
12self.queue.append(url)
13#?返回?True
14returnTrue
3、獲取一條 url 進(jìn)行下一次爬蟲
1defget_nocrawl_url(self):
2'''
3:return:?獲取一個(gè)未爬取的?url
4'''
5#?取出一個(gè)沒有爬取的?url
6nocrawl_url?=?self.queue.popleft()
7#?將未爬取的?url?添加到已經(jīng)爬取的?url?集合中
8self.set.add(nocrawl_url)
9returnnocrawl_url
4、獲取未爬取或已經(jīng)爬取的 url 長(zhǎng)度
1defget_nocrawl_size(self):
2'''
3:return:?獲取待爬取的隊(duì)列長(zhǎng)度
4'''
5nocrawl_size?=?len(self.queue)
6returnnocrawl_size
7
8defget_crawl_size(self):
9'''
10:return:?獲取已爬取的集合長(zhǎng)度
11'''
12crawl_size?=?len(self.set)
13returncrawl_size
14
15defis_nocrawl(self):
16'''
17:return:?是否存在未爬取的?url
18'''
19ifself.get_nocrawl_size()?<=0:
20returnFalse
21else:
22returnTrue