URL编码解码详解,看这一篇就够够的了 | 您所在的位置:网站首页 › 数字编码06是啥意思啊 › URL编码解码详解,看这一篇就够够的了 |
背景 最近在学爬虫技术,顺便记录一下学习的过程,供各位小伙伴参考。 URL编码解码详解当 URL 路径或者查询参数中,带有中文或者特殊字符的时候,就需要对 URL 进行编码(采用十六进制编码格式)。URL 编码的原则是使用安全字符去表示那些不安全的字符。 安全字符,指的是没有特殊用途或者特殊意义的字符。 URL基本组成URL 是由一些简单的组件构成,比如协议、域名、端口号、路径和查询字符串等,示例如下: 路径和查询字符串之间使用问号?隔开。上述示例的域名为 www.biancheng.net,路径为[1] index,查询字符串为 param=1。 URL 中规定了一些具有特殊意义的字符,常被用来分隔两个不同的 URL 组件,这些字符被称为保留字符。例如: • 冒号:用于分隔协议和主机组件,斜杠用于分隔主机和路径• ?:用于分隔路径和查询参数等。• =用于表示查询参数中的键值对。• &符号用于分隔查询多个键值对。哪些字符需要编码URL 之所以需要编码,是因为 URL 中的某些字符会引起歧义,比如 URL 查询参数中包含了”&”或者”%”就会造成服务器解析错误;再比如,URL 的编码格式采用的是 ASCII 码而非 Unicode 格式,这表明 URL 中不允许包含任何非 ASCII 字符(比如中文),否则就会造成 URL 解析错误。 URL 编码协议规定(RFC3986 协议):URL 中只允许使用 ASCII 字符集可以显示的字符,比如英文字母、数字、和- _ . ~ ! *这 6 个特殊字符。当在 URL 中使用不属于 ASCII 字符集的字符时,就要使用特殊的符号对该字符进行编码,比如空格需要用%20来表示。 除了无法显示的字符需要编码外,还需要对 URL 中的部分保留字符和不安全字符进行编码。下面列举了部分不安全字符: 下面示例,查询字符串中包含一些特殊字符,这些特殊字符不需要编码: 下表对 URL 中部分保留字符和不安全字符进行了说明: 字符 含义 十六进制值编码 + URL 中 + 号表示空格 + 空格 URL中的空格可以编码为 + 号或者 %20 %20 / 分隔目录和子目录 %2F ? 分隔实际的 URL 和参数 %3F % 指定特殊字符 % # 表示书签 %23 & URL 中指定的参数间的分隔符 %26 = URL 中指定参数的值 %3D 下面简单总结一下,哪些字符需要编码,分为以下三种情况: • ASCII 表中没有对应的可显示字符,例如,汉字。• 不安全字符,包括:# ”% [] {} | \ ^ ` 。• 部分保留字符,即 & / : ; = ? @ 。Python实现编码与解码 Python 的标准库urllib.parse模块中提供了用来编码和解码的方法,分别是 urlencode() 与 unquote() 方法。 方法 说明 urlencode() 该方法实现了对 url 地址的编码操作 unquote() 该方法将编码后的 url 地址进行还原,被称为解码 1) 编码urlencode()下面以百度搜索为例进行讲解。首先打开百度首页,在搜索框中输入“爬虫”,然后点击“百度一下”。当搜索结果显示后,此时地址栏的 URL 信息,如下所示: 可以看出 URL 中有很多的查询字符串,而第一个查询字符串就是“wd=爬虫”,其中 wd 表示查询字符串的键,而“爬虫”则代表您输入的值。 在网页地址栏中删除多余的查询字符串,最后显示的 URL 如下所示: 使用搜索修改后的 URL 进行搜索,依然会得到相同页面。因此可知“wd”参数是百度搜索的关键查询参数。下面编写爬虫程序对 “wd=爬虫”进行编码,如下所示: 输出结果,如下所示: 编码后的 URL 地址依然可以通过地网页址栏实现搜索功能。 除了使用 urlencode() 方法之外,也可以使用 quote(string) 方法实现编码,代码如下: 输出结果如下: 注意:quote() 只能对字符串编码,而 urlencode() 可以直接对查询字符串字典进行编码。因此在定义 URL 时,需要注意两者之间的差异。方法如下: 2) 解码unquote(string)解码是对编码后的 URL 进行还原的一种操作,示例代码如下: 输出结果:爬虫 3) URL地址拼接方式最后,给大家介绍三种拼接 URL 地址的方法。除了使用 format() 函数外,还可以使用字符串相加,以及字符串占位符,总结如下: 参考文章:http://c.biancheng.net/ |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |