爬虫url去重(二)

本文探讨了爬虫过程中URL去重的重要性,特别是在遇到请求失败时如何处理。作者强调,对于持续请求失败的URL,应当考虑删除以避免资源浪费。文章还涵盖了回滚机制和重新学习的基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

还是关于去重,想着有些请求可能失败以后,虽然回滚了当前爬取失败的url,可是要是此url一直请求失败,应该是要删除的,重新学习了一边基础知识。

# -*- coding: utf-8 -*-

import redis


class UrlOption(object):
    '''
    这是一个爬虫的url管理器类
    
    '''
    def __init__(self,spider_name='',host='127.0.0.1',port=6379,**kwargs):
        '''
        @params:spider_name 爬虫名称
        @params:host redis主机地址
        @params:port redis服务端口
        @params:kwargs redis其他需要参数
        '''
        self.counts = 1
        self.__conn = redis.Redis(host=host,port=port)
        self.__new = spider_name+'_new'
        self.__old = spider_name+'_old'
        
    def adds(self,*values):
        '''
        向管理器加入url
        '''

        for url in values:
            if not self.__conn.sismember(self.__old,'{"%s":%s}'%(url,self.counts)):#判断是否存在已经爬取过的url集合里面,存在返回TRUE

                self.__conn.sadd(self.__new,'{"%s":%s}'%(url,self.counts))#不存在则加入待爬取队列
        else:
            return True#已经爬取过了,返回爬取完成的标识为TRUE
     
        
    def get_url(self):
        '''
        获取一条为待抓取的url
        '''
        url = self.__conn.spop(self.__new) #从待爬取集合里面获取url,type为{url:1}需要
        # 这般操作json.loads(sf)>list(js.keys())[0]
        if url:
            self.__conn.sadd(self.__old,'{"%s":%s}'%(url,self.counts))#加入到已经爬取完成的集合,并且返回该条url供调度器爬取
            return url
        else:
            return False
    
    def back_error(self,url,score):
        '''
        未成功抓取url的处理方法
        '''
        try:
            self.__conn.smove(self.__old,self.__new,'{"%s":%s}'%(url,score))#正确移动返回为TRUE
            return True
        except:
            return False#未移动成功,返回false

    def count(self):
        '''
        未抓取url数量获取
        '''
        return self.__conn.scard(self.__new)
        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值