認(rèn)識(shí)爬蟲:怎樣管理爬蟲過程中已使用和未使用的 URL 地址?

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容