URL去重-MD5算法学习笔记

URL去重-MD5算法学习笔记

在网络爬虫过程中,会爬取到很多相同的url,这个时候就需要我们去掉重复的URL。关于URL去重的算法有很多,刚刚学习了MD5算法。MD5算法是基于Hash的算法。所以首先说说Hash算法。

Hash算法

对于爬取下来的URL,可以基于Hash函数进行存储,也就是一个URL 经过Hash函数,映射到散列表中的一个具体的物理位置上。每次只要计算刚刚爬取下来的URL是否已经存在,就可以了。这样做,有两个问题。

  1. 主要依赖于Hash函数。如果Hash函数设计的不好,在进行映射的时候,发生碰撞的几率很大,则再进行碰撞的处理也非常复杂。
  2. 未经处理的URL有可能占用很大的存储空间

MD5算法

MD5算法是一种加密算法,同时它也是基于Hash的算法。**首先对URL字符串进行压缩,得到一个压缩字符串,解决了URL 占用很大存储空间的问题。**同时可以直接得到一个Hash地址。MD5进行Hash映射碰撞的几率非常小。

MD5算法的具体步骤

MD5算法:以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值

  1. 填充数据:首先需要对信息进行填充,使其字节长度对512求余的结果等于448。因此,信息的字节长度(bits length)将被扩展至n512+448(位),即n64+56个字节(bytes)。<一个字节==8位>。填充时,紧挨着数据补1,其余往后都补0。
  2. 添加数据长度:在填充的信息后面加上64位的数据,(也就是8字节)。

<经过以上两步,现有的数据长度是n*64+56+8个字节==(n+1)*64字节> 恰好是64个字节的整数倍。这样做的原因是为满足后面处理中对信息长度的要求
3. 初始化参数:MD5中有4个4字节(32位)的整数参数,也就是链接变量。
a=0x01234567,b=0x89abcdef,c=0xfedcba98,d=0x76543210
4. 进行循环运算+设置非线性函数:主循环有四轮。第一轮进行16次操作。每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量,文本的一个子分组和一个常数。再将所得结果向右环移一个不定的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。

以一下是每次操作中用到的四个非线性函数(每轮一个)。

f(x,y,z) =(x&y)|((~x)&z)

g(x,y,z) =(x&z)|(y&(~z))

h(x,y,z) =xyz

i(x,y,z)=y^(x|(~z))

关于URL去重-MD5算法步骤相关推荐

  1. URL 去重的 6 种方案!(附详细代码)

    来源 | Java中文社群(ID:javacn666) URL 去重在我们日常工作中和面试中很常遇到,比如这些: 可以看出,包括阿里,网易云.优酷.作业帮等知名互联网公司都出现过类似的面试题,而且和 ...

  2. URL去重的几种方法

    在爬虫启动工作的过程中,我们不希望同一个网页被多次下载,因为重复下载不仅会浪费CPU机时,还会为搜索引擎系统增加负荷.而想要控制这种重复性下载问题,就要考虑下载所依据的超链接,只要能够控制待下载的UR ...

  3. python爬虫去重_Python网络爬虫(7):URL去重

    摘要:从零开始写爬虫,初学者的速成指南! 封面: image 本期我们来聊聊URL去重那些事儿.以前我们曾使用Python的字典来保存抓取过的URL,目的是将重复抓取的URL去除,避免多次抓取同一网页 ...

  4. url去重的几种方式

    一.url去重的几种方式 1.使用 Java 的 Set 集合判重 Set 集合天生具备不可重复性,使用它只能存储值不相同的元素,如果值相同添加就会失败,因此我们可以通过添加 Set 集合时的结果来判 ...

  5. MD5 算法描述及实现

    MD5 算法的原理及实现 章节目录 简介 算法描述 实现 作者能力有限, 如果您在阅读过程中发现任何错误, 还请您务必联系本人,指出错误, 避免后来读者再学习错误的知识.谢谢! 简介## Wiki对其 ...

  6. MD5算法之C#程序 MD5算法描述

    MD5算法之C#程序 MD5算法描述 MD5算法描述 当我要写一个MD5算法的程序时,发现中英文的语言描述都有一些不确切的地方,某些个细节 讲得不清楚,或者说很费解.最后不得不拿出C语言的源程序来调试 ...

  7. 搜索引擎的那些事(32位MD5算法)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 对于学过密码学的同学来说,md5算法肯定不会很陌生.但是,对于我来说,md5是一个新的命题.那 ...

  8. 用PHP实现MD5算法

    在上一篇文章 << Content-MD5字段 >>中我们有提到MD5算法,此处MD5算法的作用是验证文件的完整性,这与MD5算法开始的应用场景是一致的,即在90年代被广泛使用 ...

  9. MD5算法的编程实现

    MD5算法的编程实现 [实验目的] [实验环境] [实验预备知识点] [实验内容] [实验步骤] [实验思考题] [实验目的] 1.理解Hash函数的计算原理和特点. 2.理解MD5算法原理. 3.了 ...

最新文章

  1. SAP RETAIL WA03 基于分配表创建PO报错 - No work list could be selected –
  2. ResNet网络解决的一些事
  3. vuejs构建的单页面应用history模式子页面微信分享在iOS中遇到的问题
  4. 红帽7 su命令与sudo服务
  5. ORACLE备份中的压缩
  6. 一招解决4道leetcode hard题,动态规划在字符串匹配问题中的应用
  7. 获取位置_原神蜥蜴尾巴怎么获得 蜥蜴尾巴获取位置分享
  8. 【工具】获取窗口与控件信息
  9. 公共教室计算机安全调查报告论文,计算机实习调查报告.docx
  10. 解决:kubeadm init K8S初始化报错02
  11. 3.3 String(字符串)
  12. 盲盒小程序的开发功能介绍,优势有哪些
  13. mysql dlz驱动,安装wddns3 /dlz_mysql_driver.c:76:19: 错误:mysql.h:没有那个文件或目录...
  14. 排序算法c语言描述---归并排序
  15. python解决微分方程(数值解法)
  16. 2 个python美化表格数据输出结果的工具,摸鱼简直心安理得~
  17. CMD命令工具--Windows下使用tree命令生成目录
  18. 超强阵容!2022亚马逊云科技 re:Invent 全球大会主题演讲嘉宾揭晓
  19. Eclipse 在线安装SVN插件
  20. 如何搜索同一文件夹(含子文件夹)下的所有Excel关键字

热门文章

  1. 超级计算机预报威海雨雪,形势突然调整,山东后天20日雨雪范围扩大,霜冻线也即将回归...
  2. 浙江大学-数据挖掘课程-复习笔记
  3. 使用beyond compare4作为Git的比较工具
  4. python编程 上册第4版_人美版四年级上册美术第4课在快乐的节日里
  5. php中的时间戳_PHP 时间戳 timestamp
  6. 【渝粤题库】广东开放大学 电子支付与安全 形成性考核
  7. 钓鱼网站-现代网络“李鬼”
  8. 【unity】粒子系统
  9. 招标文件和竞争性谈判文件区别
  10. Oracle_取随机数函数的常用方法