开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天
一、本篇笔记重点内容:
- 了解URL、URL组成
- URL去重
- URL重定向
二、详细知识点介绍
了解URL、URL组成
一个基本的URL包含以下内容:
- 基本URL包含模式(或称协议)
- 服务器名称(或IP地址)
- 路径和文件名,如“协议://授权/路径?查询”
- 完整的、带有授权部分的普通统一资源标志符语法
- 看上去如下:协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数=值#标志
URL的格式由三部分组成:
- 第一部分是协议(或称为服务方式)
- 第二部分是存有该资源的主机IP地址(有时也包括端口号)
- 第三部分是主机资源的具体地址,如目录和文件名等
URL去重
去重的重要性
- 网络爬虫爬取重复的URL链接,会下载相同网页的内容,造成计算资源的消耗,给服务器带来不必要的负担
- 解决重复下载的问题,可以提高爬虫效率,减少不必要的资源消耗
去重的三种方式
- Hash去重
- Hash,也称为哈希,散列,是把任意长度的输入,通过给定的函数,转换为长度固定的输出
- Hash的实质是一种压缩映射,散列值的空间通常远小于输入的空间
- 不需要遍历所有的元素,提高了查找效率
- 每个散列值对应一个桶,同一个桶存放的是所有散列值相同的元素。88经过hash函数之后,得到一个散列值8,所以就把88放在8号桶中
- 解决Hash碰撞,目前有以下几种方式:
- 开放寻址法 开放寻址:所有的元素经过Hash映射后都存放在散列表中
当新的元素进入散列表中,检查散列表的各项,直到发现有“空”的位置,将该元素放入为止
我们可以使用以下三种方法来实现开放寻址:
线性探测:h(k,i) = (h’(k)+i)mod m, 0 ≤ i ≤ m-1
二次探测:h(k,i) =(h’(k)+i*i)%m , 0 ≤ i ≤ m-1
双重散列:h(k,i)=(h1(k)+ih2(k)) mod m, 0 ≤ i ≤ m-1
- 拉链法
拉链法:将Hash散列表看作一个链表数组。数组中的位置要么为空,要么指向散列到该位置的链表
拉链法把元素添加到链表中来解决Hash碰撞,具有相同散列值的元素会插入相对应的链表中
拉链法的代价不会超过向链表中添加元素,也无需执行再散列
- URL压缩
- URL压缩基于MD5算法对URL进行加密压缩,生成散列值,来判断URL的唯一性
- MD5是一种基于Hash的加密算法,它可以压缩URL生成:
- 一个压缩的128位整数
- 一个Hash物理地址
- 使用MD5算法进行Hash映射,发生Hash碰撞的几率小,为网络爬虫抓取所使用
- Bloom Filter去重
Bloom Filter是在1970年由Bloom提出的一种多哈希函数映射的快速查找算法
它是一种空间效率高的随机数据结构 使用位数组表示一个集合 判断一个元素是否属于这个集合
URL重定向
重定向(redirect)允许一个网页在不同的域名下显示
重定向有两种形式 :
Ø Dispatch:服务器端重定向,网页在加载之前先改变了URL
Ø Redirect:客户端重定向,有时你会在网页上看到“10 秒钟后页面自动跳转到......”之类的消息, 表示在跳转到新 URL 之前网页需要加载内容
重定向的机制:
Ø 客户端发起请求
Ø 服务器给出实际url,设置状态响应码
Ø 客户端接收response,以新url发起请求
Ø 服务器接受请求,返回资源,设置状态码
客户端重定向与服务器重定向:
Ø 客户端重定向,也称为HTTP重定向,是HTTP协议规定的一种机制。
Ø 服务器重定向是在处理客户端提交的request过程中,服务器将request先后委托多个处理单元接替进行处理的过程