python爬虫基础扫盲之URL
URL全称为Uniform Resurce Locator统一资源定位符,在上世纪90年代互联网刚刚发展起来时,为了解决在多机联网上场景中便于方便查找资源,于是一帮人(当然大部分是美国人)制定了一个标准,为网上各个资源统一定义一个资源位置,方便大家查找资源,该资源位置即为URL,每个资源的URL为全球唯一,后来该标准逐渐纳入到RFC当中,URL的RFC协议总体纲要为RFC1808,该协议对URL的解释如下:

URL不仅代表了资源在网络上的位置,还代表了通过Internet访问该资源的方法
URL格式
URL的一般格式主要由以下6个部分组成:
<scheme>://<net_loc>/<path>;<params>?<query>#<fragment>
scheme:代表的准备访问服务器使用的什么协议,在RFC1738中,介绍了其主要协议:

由于该协议出现在1994年,后来有不断出现了新的协议如HTTPS等
在RFC1738中,对Scheme命名规则:允许‘a’~'z',允许使用“+”,“.”,"-"特殊字符,不区分大小写:如“HTTP”和“http”相同:

“//” net_loc: 代表为网络位置以及登录信息,其格式主要为:
<user>:<password>@<host>:<port>
user代表用户名, password:为用户密码
host为主机网络地址, port为端口号
那么可能有人会问到,之间在url中输入用户名和密码,岂不是很不安全?
是的,早期的协议确实有很多bug,后来协议演进之后一些敏感信息采用了其他方式进行传递,每个网络服务提供商也都会有默认端口号,现今很多url不在传递密码和端口号,只保留了主机网络地址,如百度:https://www.baidu.com
“/”’path:代表了服务器上资源的路径,用‘/’与前面路径隔开
“;”params:为传递给服务器的一些参数,使用‘,’与前面隔开
"?"<query>:为向服务器发起一些查询请求,使用“?”与前面隔开
#<fragment>:一片段或者一部分资源的名字,一般为客户端内部使用,使用"#"与前面隔开
关键字符和保留字符
RFC1738中规定了一些关键字符和保留字符,不能用于资源路径字符路径,在解析URL时,遇到以下字符代表着一些特殊意义:
| 字符 | 保留/受限 |
| % | 保留作为编码字符的转义标志 |
| / | 保留作为路径组件中分隔路径段的定界符 |
| . | 保留在路径组件中使用 |
| .. | 保留在路径组件中使用 |
| # | 保留作为分段定界符使用 |
| ? | 保留作为查询字符串定界符使用 |
| ; | 保留作为参数定界符使用 |
| : | 保留作为参数定界符使用 |
| : | 保留作为方案、用户/口令,以及主机/端口组件的定界符使用 |
| $,+ | 保留 |
| @&= | 在某些方案的上下文中有特殊的含义,保留 |
| {}|\^~[]’ <>” | 由于各种传输Agent代理,比如各种网关的不安全处理,使用受限不安全;这些字符在URL范围之外通常是有意义的,所以应该对其进行编码 |
| 0x00-0x1F,0x7F | 受限,这些十六进制范围内的字符都在US-ASCII字符集的不可打印区间内。 |
| >0x7F | 受限,十六进制值在此范围内的字符都不在US-ASCII字符集的7二进制位范围内。 |
相对和绝对URL
在网络上每个资源(文本,图片,视频等)都有自己的地址,即都有一个自己的绝对URL,但是访问资源时每个资源都使用绝对URL都很长,通常每个人都不会记住那么长的URL,一般只会记住几个关键词。在相同服务器下的资源,一般都使用相对URL,这样就会非常快捷的访问自己所需要的资源。
对于相对URL,都必须有一个称谓Base基础URL的解析,和基础URL组合在一起才能达到访问资源的目的。
RFC1808中,给出了解析相对URL的算法,但是对于爬虫来讲不是重点,不再介绍
更多推荐
所有评论(0)