python爬虫模块URL管理器模块用法解析
这篇文章主要介绍了python爬虫模块URL管理器模块用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
URL管理器模块
一般是用来维护爬取的url和未爬取的url已经新添加的url的,如果队列中已经存在了当前爬取的url了就不需要再重复爬取了,另外防止造成一个死循环。举个例子
我爬www.baidu.com其中我抓取的列表中有music.baidu.om,然后我再继续抓取该页面的所有链接,但是其中含有www.baidu.com,可以想象如果不做处理的话就成了一个死循环了,在百度首页和百度音乐页循环,所以有一个对列来维护URL是很重要的。
下面以python代码实现为例,使用的deque双向队列方便取出以前的url。
fromcollectionsimportdeque classURLQueue(): def__init__(self): self.queue=deque()#待抓取的网页 self.visited=set()#已经抓取过的网页 defnew_url_size(self): ''''' 获取未爬取URL集合的大小 :return: ''' returnlen(self.queue) defold_url_size(self): ''''' 获取已爬取URL的大小 :return: ''' returnlen(self.visited) defhas_new_url(self): ''''' 判断是否有未爬取的URL :return: ''' returnself.new_url_size()!=0 defget_new_url(self): ''''' 获取一个未爬取的URL :return: ''' new_url=self.queue.popleft()#从左侧取出一个链接 self.old_urls.add(new_url)#记录已经抓取 returnnew_url defadd_new_url(self,url): ''''' 将新的URL添加到未爬取的URL集合 :paramurl:单个url :return: ''' ifurlisNone: returnFalse ifurlnotinself.new_urlsandurlnotinself.old_urls: self.new_urls.append(url) defadd_new_urls(self,urlset): ''''' 将新的URL添加到未爬取的URL集合 :paramurlset:url集合 :return: ''' ifurlsetisNoneorlen(urlset)==0: return forurlinurlset: self.add_new_url(url)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。