python爬虫办公模块_python爬虫模块之URL管理器模块

URL管理器模块

一般是用来维护爬取的url和未爬取的url已经新添加的url的,如果队列中已经存在了当前爬取的url了就不需要再重复爬取了,另外防止造成一个死循环。举个例子

我爬www.baidu.com 其中我抓取的列表中有music.baidu.om,然后我再继续抓取该页面的所有链接,但是其中含有www.baidu.com,可以想象如果不做处理的话就成了一个死循环了,在百度首页和百度音乐页循环,所以有一个对列来维护URL是很重要的。

下面以python代码实现为例,使用的deque双向队列方便取出以前的url。

from collections import deque

class URLQueue():

def __init__(self):

self.queue = deque() # 待抓取的网页

self.visited = set() # 已经抓取过的网页

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):

'''''

获取一个未爬取的URL

:return:

'''

new_url = self.queue.popleft()#从左侧取出一个链接

self.old_urls.add(new_url)#记录已经抓取

return new_url

def add_new_url(self, url):

'''''

将新的URL添加到未爬取的URL集合

:param url: 单个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)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值