【python爬虫】—URL管理器的实现

news/2024/7/19 8:52:18 标签: python, 爬虫, 开发语言

python爬虫-url管理器

  • url管理器的作用
  • python实现

url管理器的作用

  • 在Python爬虫中,URL管理器(URL Manager)是一个重要的组件,用于有效管理爬取过程中所涉及的URL。它主要负责以下几个方面的任务:

    • URL去重(去重复):在爬取过程中,会遇到相同的URL被重复爬取的情况,这不仅浪费了时间和资源,还可能导致数据重复。URL管理器通过维护一个已经爬取过的URL集合,确保每个URL只被爬取一次,避免重复。

    • URL调度(调度顺序)爬虫需要决定下一个要爬取的URL是哪个。URL管理器负责根据一定的策略,选择下一个要爬取的URL,可以使用先进先出(FIFO)、后进先出(LIFO)、优先级队列等不同的调度策略。

    • 新URL添加:当从一个网页中解析出新的URL时,URL管理器负责将这些新URL添加到待爬取的URL队列中,以确保爬虫能够持续地探索新的页面。

    • URL状态管理:URL管理器可以记录每个URL的状态,例如是否已经爬取、是否成功、失败次数等。这有助于在后续的爬取过程中进行优化和错误处理。

    • 数据持久化:在爬虫运行结束后,URL管理器通常会将已经爬取的URL保存下来,以便下次运行时恢复之前的状态。

  • URL管理器通常由两个部分组成:待爬取URL队列(待爬取URL集合)和已爬取URL集合。这两部分工作协同,确保爬虫能够高效地运行,不重复爬取URL,同时按照合适的策略调度URL。

综上所述,URL管理器在爬虫中起到了整合、协调、去重和调度的重要作用,帮助爬虫更加高效地获取所需的信息。

python_17">python实现

python">class UrlManager():
    """url管理器"""

    def __init__(self):
        # 初始化待爬取url和已爬取url
        self.new_urls = set()
        self.old_urls = set()
    
    def add_new_url(self, url):
        """添加新的url"""
        if (url is None) or (len(url) == 0):
            return("Error! The URL to be added is empty")
        if (url in self.new_urls) or (url in self.old_urls):
            return('Error! The URL to be added already exists')
        self.new_urls.add(url)
    
    def add_new_urls(self, urls):
        """批量添加新的url"""
        if (urls is None) or (len(urls) == 0):
            return("Error! The URLs to be added is empty")
        
        for url in urls:
            self.add_new_url(url)
    
    def get_url(self):
        """获取爬取url,并记录"""
        if self.find_new_url():
            url = self.new_urls.pop()
            self.old_urls.add(url)
            return url
        else:
            return("Crawling completed, the URL to be crawled is empty")
    
    def find_new_url(self):
        return len(self.new_urls) > 0
    

if __name__ == "__main__":
    url_manager = UrlManager()
    url_manager.add_new_url('url1')
    url_manager.add_new_urls(['url1','url2'])
    print("new_urls:{}, old_urls:{}".format(url_manager.new_urls, url_manager.old_urls))

    print("+"*30)
    new_url = url_manager.get_url()
    print("new_urls:{}, old_urls:{}".format(url_manager.new_urls, url_manager.old_urls))

    print("+"*30)
    new_url = url_manager.get_url()
    print("new_urls:{}, old_urls:{}".format(url_manager.new_urls, url_manager.old_urls))

    print("+"*30)
    print(url_manager.find_new_url())


"""
output:
new_urls:{'url2', 'url1'}, old_urls:set()
++++++++++++++++++++++++++++++
new_urls:{'url1'}, old_urls:{'url2'}
++++++++++++++++++++++++++++++
new_urls:set(), old_urls:{'url2', 'url1'}
++++++++++++++++++++++++++++++
False
"""


http://www.niftyadmin.cn/n/4980280.html

相关文章

4.网络设计与redis、memcached、nginx组件(二)

系列文章目录 第四章 网络设计与redis、memcached、nginx组件(一) 第五章 网络设计与redis、memcached、nginx组件(二) 文章目录 系列文章目录[TOC](文章目录) 前言一、reactor模型?二、Reactor 开发1.建立连接 三、典型reactor 模型单reactor 模型典型 readisradi…

c# modbus CRC计算器(查表法)

一、简介: 本案例为crc计算器,通过查表法计算出结果 1.窗体后台源代码 using Crc; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text…

CentOS 7 Nacos 设置开机自动重启

一、说明 Nacos如果是手动启动的话,在服务器宕机或者重启后,没有自动运行,影响很多业务系统,需要每次手动执行命令 startup.sh -m standalone,才能启动 Nacos 服务,不能像docker服务一样,使用 …

【资料分享】全志科技T507工业核心板硬件说明书(三)

目 录 3 电气特性 3.1 工作环境 3.2 功耗测试 3.3 热成像图 4 机械尺寸 5 底板设计注意事项 5.1 最小系统设计 5.1.1 电源设计说明 5.1.2 系统启动配置 5.1.3 系统复位信号 5.2 其他设计注意事项 5.2.1 保留Micro SD卡接口 5.2.2 保留UART0接口 6 附图最小系统…

升讯威在线客服系统的并发高性能数据处理技术:具体化视图

我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户。对我来说,只要能获得用户的认可,就是我最大的动力。 最近客服系统成功经受住了客户现场组织的压力测试,获得了客户的认可。 客户组织多名客服上线后&a…

PHP用CURL发送Content-type为application/json的POST请求方法

HELLO 各位伙伴,最近一直在做项目,没有及时更新。望请见谅。 今天,给大家讲一下php请求第三方接口的时候遇到的问题,大家都知道,在请求第三方接口的时候,会要求我们用post还是get来传参 一般我们传参的时候…

spring打入filter内存马+冰蝎成功

环境&#xff1a; springboot版本2.4.5 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.5</version><relativePath/> <!-- lookup parent from r…

6、监测数据采集物联网应用开发步骤(5.2)

监测数据采集物联网应用开发步骤(5.1) 包含4个类数据库连接&#xff08;com.zxy.db_Self.ConnectionPool_Self.py&#xff09;、数据库操作类&#xff08;com.zxy.db_Self.Db_Common_Self.py&#xff09;、数据库管理类&#xff08;com.zxy.db_Self.DBManager_Self.py&#xf…