【python爬虫】—URL管理器的实现
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实现
class UrlManager():"""url管理器"""def __init__(self):# 初始化待爬取url和已爬取urlself.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 urlelse:return("Crawling completed, the URL to be crawled is empty")def find_new_url(self):return len(self.new_urls) > 0if __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
"""相关文章:
【python爬虫】—URL管理器的实现
python爬虫-url管理器 url管理器的作用python实现 url管理器的作用 在Python爬虫中,URL管理器(URL Manager)是一个重要的组件,用于有效管理爬取过程中所涉及的URL。它主要负责以下几个方面的任务: URL去重(…...
Oracle 19C RAC安装PSU oui-patch.xml权限错误
Oracle 19C RAC安装PSU时,节点2安装失败,经排查错误原因为oui-patch.xml文件权限错误。 Oracle官方建议oui-patch.xml文件权限,改成660或者666: chmod 660 oui-patch.xml权限修改完成后,安装psu还是失败,…...
华为数通方向HCIP-DataCom H12-821题库(单选题:161-180)
第161题 以下关于 URPF(Unicast Reverse Path Forwarding) 的描述, 正确的是哪一项 A、部署了严格模式的 URPF,也能够可以同时部署允许匹配缺省路由模式 B、如果部署松散模式的 URPF,默认情况下不需要匹配明细路由 C、如果部署松散模式的…...
ResNet详解:网络结构解读与PyTorch实现教程
目录 一、深度残差网络(Deep Residual Networks)简介深度学习与网络深度的挑战残差学习的提出为什么ResNet有效? 二、深度学习与梯度消失问题梯度消失问题定义为什么会出现梯度消失?激活函数初始化方法网络深度 如何解决梯度消失问…...
ChatGPT 随机动态可视化图表分析
动态可视化图表分析实例如下图: 这样的动态可视化图表可以使用ChatGPT OpenAI 来实现。 给ChatGPT发送指令: 你现在是一个数据分析师,请使用HTML,JS,Echarts,来完成一个动态条形图,条形图方向横向,数据可以随机生成,并且随机生成10个不同的商品名称,每个类别分别用…...
国标视频融合云平台EasyCVR视频汇聚平台的应用场景及其功能说明
一、平台简介 EasyCVR国标视频融合云平台是一款基于端-边-云一体化架构的视频融合AI智能分析网关平台。EasyCVR平台支持视频汇聚、融合管理,兼容多类型设备、多协议接入。其提供的视频功能包括:视频监控、无插件直播录像、云存储、检索回放、智能告警、…...
后端面试话术集锦第三篇:spring cloud 面试话术
🚗后端面试集锦目录 💖后端面试话术集锦第 1 篇:spring面试话术💖 💖后端面试话术集锦第 2 篇:spring boot面试话术💖 💖后端面试话术集锦第 3 篇:spring cloud面试话术💖 💖后端面试话术集锦第 4 篇:ElasticSearch面试话术💖 💖后端面试话术集锦第 5 …...
React 18 选择 State 结构
参考文章 选择 State 结构 构建良好的 state 可以让组件变得易于修改和调试,而不会经常出错。以下是在构建 state 时应该考虑的一些建议。 构建 state 的原则 当编写一个存有 state 的组件时,需要选择使用多少个 state 变量以及它们都是怎样的数据格…...
LNMT与动静分离
目录 一、LNMT 一、部署tomcat 二、部署nginx 三、部署mariadb 四、配置nginx 二、操作流程及步骤 一、在第一台机器上进入 vim /etc/nginx/nginx.conf 更改配置文件 二、并查看端口是否成功启动 三、验证 四、再次来到网页验证 五、动静分离(修改配置…...
【java】LinkedList 和 ArrayList的简介与对比
Java LinkedList和 ArrayList 在使用上,几乎是一样的。由于LinkedList是基于双向链表的,会多出list.getFirst();获取头部元素等方法 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按…...
机器学习基础14-算法调参(基于印第安糖尿病Pima数据集)
机器学习的模型都是参数化的,可以通过调参来提高模型的准确度。 模型有很多参数,如何找到最佳的参数组合,可以把它当作一个查询问题来处理,但是调整参数到何时为止呢?应该遵循偏差和方差协调的原则。 接下来将介绍在 s…...
ASUS华硕天选4笔记本电脑FA507XV原厂Windows11系统22H2
天选四FA507X原装系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件 华硕电脑管家、奥创控制中心等预装程序,恢复出厂状态W11 链接:https://pan.baidu.com/s/1SPoFW7wR5KawGu-yMckNzg?pwdayxd 提取码:ayxd...
IET独立出版 | EI检索 | 2023年第三届机械、航空航天与汽车工程国际会议
会议简介 Brief Introduction 2023年第三届机械、航空航天与汽车工程国际会议(CMAAE 2023) 会议时间:2023年12月8 -10日 召开地点:中国南京 大会官网:www.cmaae.org 航天是当今世界最具挑战性和广泛带动性的高技术领域…...
【Pytorch】CUDA error: no kernel image is available for execution on the device
记录一下pytorch安装的cuda版本和GPU cuda不一致的解决。 RuntimeError: CUDA error: no kernel image is available for execution on the device 一般就是pytorch和cuda安装的不匹配。 如果我安装的torch配的cuda信息如下, torch.__version__: 1.8.1cu102 tor…...
dolphinschedule配置企微告警服务(WeChat群组)
一、前置说明 ds配置好工作流后,比较重要的一个就是上线后的监控报警服务,如果你是基于企微作为协同办公的,WeChat群组预警必须是要安排上的,文章基于自建应用配合群组方式构建预警群,接入后,任务成功或者…...
Git中smart Checkout与force checkout
Git中smart Checkout与force checkout 使用git进行代码版本管理,当我们切换分支有时会遇到这样的问题: 这是因为在当前分支修改了代码,但是没有commit,所以在切换到其他分支的时候会弹出这个窗口, 提示你选force checkout或者smart checko…...
Java“牵手”1688商品跨境属性数据,1688API接口申请指南
1688平台商品详情跨境属性数据接口是开放平台提供的一种API接口,通过调用API接口,开发者可以获取1688商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片,重量,详情描述等详细信息 。 获取商品详情接口API是一种用于…...
Win解答 | 解决键盘中 字母+空格 导致的输入法弹窗导致的一系列问题
近三个月来,一直都有一个键盘组合键的问题影响我的电脑使用,不管是打字还是打游戏,都会出现按键盘的 字母空格 弹出一个特殊符号的候选框,如下图所示 图片中为 S空格 所出现的弹窗 一个看似方便,实则难受的功能 其实打…...
WPF读取dicom序列:实现上一帧、下一帧、自动播放、暂停
一、整体设计概况 创建WPF程序使用.Net Framework4.8定义Image控件展示图像增加标签展示dcm文件信息规划按钮触发对应的事件:上一帧、下一帧、自动播放、暂停、缩放、播放速率二、页面展示 三、代码逻辑分析 Windows窗体加载Loaded事件:生成初始图像信息Windows窗体加载Mous…...
homeassistant ubuntu自启动 网络设置
命令行安装virtualbox 或者安装包 hass官网下载 haos_ova-10.4.vdi virtualbox 装hass 最少2G内存 其他省略 自启动: gnome-session-properties 添加 VBoxManage startvm hass --type headless hass为自己的虚拟机名字 网络配置如下: 要全部打开...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
