zoukankan      html  css  js  c++  java
  • 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)
     
     
  • 相关阅读:
    再说LZ77压缩算法
    关于LZ77压缩算法
    Qt 简易设置透明按钮
    MFC edit 控件 自动将光标置于想要输入内容的位置
    事件和委托
    2016/06/07
    2016/04/28
    2016/4/27
    2016/04/26
    重载和重写(Overload, Override)
  • 原文地址:https://www.cnblogs.com/c-x-a/p/9174882.html
Copyright © 2011-2022 走看看