python爬蟲(chóng)模塊URL管理器模塊用法解析
這篇文章主要介紹了python爬蟲(chóng)模塊URL管理器模塊用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
URL管理器模塊
一般是用來(lái)維護(hù)爬取的url和未爬取的url已經(jīng)新添加的url的,如果隊(duì)列中已經(jīng)存在了當(dāng)前爬取的url了就不需要再重復(fù)爬取了,另外防止造成一個(gè)死循環(huán)。舉個(gè)例子
我爬www.baidu.com 其中我抓取的列表中有music.baidu.om,然后我再繼續(xù)抓取該頁(yè)面的所有鏈接,但是其中含有www.baidu.com,可以想象如果不做處理的話(huà)就成了一個(gè)死循環(huán)了,在百度首頁(yè)和百度音樂(lè)頁(yè)循環(huán),所以有一個(gè)對(duì)列來(lái)維護(hù)URL是很重要的。
下面以python代碼實(shí)現(xiàn)為例,使用的deque雙向隊(duì)列方便取出以前的url。
from collections import deque
class URLQueue():
def __init__(self):
self.queue = deque() # 待抓取的網(wǎng)頁(yè)
self.visited = set() # 已經(jīng)抓取過(guò)的網(wǎng)頁(yè)
def new_url_size(self):
'''''
獲取未爬取URL集合的大小
:return:
'''
return len(self.queue)
def old_url_size(self):
'''''
獲取已爬取URL的大小
:return:
'''
return len(self.visited)
def has_new_url(self):
'''''
判斷是否有未爬取的URL
:return:
'''
return self.new_url_size() != 0
def get_new_url(self):
'''''
獲取一個(gè)未爬取的URL
:return:
'''
new_url = self.queue.popleft()#從左側(cè)取出一個(gè)鏈接
self.old_urls.add(new_url)#記錄已經(jīng)抓取
return new_url
def add_new_url(self, url):
'''''
將新的URL添加到未爬取的URL集合
:param url: 單個(gè)url
:return:
'''
if url is None:
return False
if url not in self.new_urls and url not in self.old_urls:
self.new_urls.append(url)
def add_new_urls(self, urlset):
'''''
將新的URL添加到未爬取的URL集合
:param urlset: url集合
:return:
'''
if urlset is None or len(urlset) == 0:
return
for url in urlset:
self.add_new_url(url)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Pytorch使用卷積神經(jīng)網(wǎng)絡(luò)對(duì)CIFAR10圖片進(jìn)行分類(lèi)方式
這篇文章主要介紹了Pytorch使用卷積神經(jīng)網(wǎng)絡(luò)對(duì)CIFAR10圖片進(jìn)行分類(lèi)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
Python學(xué)習(xí)筆記之While循環(huán)用法分析
這篇文章主要介紹了Python學(xué)習(xí)筆記之While循環(huán)用法,結(jié)合具體實(shí)例形式分析了while循環(huán)的原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-08-08
關(guān)于DataFrame數(shù)據(jù)的查詢(xún)和編輯
在使用pandas處理DataFrame時(shí),可通過(guò)列索引標(biāo)簽獲取列數(shù)據(jù),行數(shù)據(jù)的獲取可以利用行索引或位置切片,如iloc和loc方法,增加數(shù)據(jù)時(shí),可通過(guò)append方法增加行,直接賦值增加列,刪除數(shù)據(jù)則通過(guò)drop方法,通過(guò)設(shè)置axis參數(shù)確定是刪除行還是列2024-09-09
Python實(shí)現(xiàn)list反轉(zhuǎn)實(shí)例匯總
這篇文章主要介紹了Python實(shí)現(xiàn)list反轉(zhuǎn)的方法,實(shí)例總結(jié)了關(guān)于list的各種較為常見(jiàn)的操作技巧,需要的朋友可以參考下2014-11-11
Python matplotlib繪制實(shí)時(shí)數(shù)據(jù)動(dòng)畫(huà)
Matplotlib作為Python的2D繪圖庫(kù),它以各種硬拷貝格式和跨平臺(tái)的交互式環(huán)境生成出版質(zhì)量級(jí)別的圖形。本文將利用Matplotlib庫(kù)繪制實(shí)時(shí)數(shù)據(jù)動(dòng)畫(huà),感興趣的可以了解一下2022-03-03
Python+OpenCV圖片局部區(qū)域像素值處理改進(jìn)版詳解
這篇文章主要為大家詳細(xì)介紹了Python+OpenCV圖片局部區(qū)域像素值處理的改進(jìn)版,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
Python文件基本操作open函數(shù)應(yīng)用與示例詳解
這篇文章主要為大家介紹了Python文件基本操作open函數(shù)應(yīng)用與示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
pandas重復(fù)行刪除操作df.drop_duplicates和df.duplicated的區(qū)別
本文主要介紹了pandas重復(fù)行刪除操作df.drop_duplicates和df.duplicated的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
Python中的sorted函數(shù)應(yīng)用及文件操作詳解
這篇文章主要介紹了Python中的sorted函數(shù)應(yīng)用及文件操作詳解,python只能將字符串寫(xiě)入到文本文件,要將數(shù)值數(shù)據(jù)存儲(chǔ)到文本本件中,必須先試用函數(shù)str()將其轉(zhuǎn)換為字符串格式,需要的朋友可以參考下2023-12-12
Python使用PyQt5實(shí)現(xiàn)中英文切換功能
在Python中使用PyQt5實(shí)現(xiàn)應(yīng)用程序的中英文切換功能,可以通過(guò)國(guó)際化(i18n)和本地化(l10n)的技術(shù)來(lái)實(shí)現(xiàn),以下是一個(gè)詳細(xì)的教程,包括UI界面多語(yǔ)言切換和程序內(nèi)部字符串多語(yǔ)言切換兩部分,需要的朋友可以參考下2024-12-12

