安全字符,指的是没有特殊用途或者特殊意义的字符。
http://www.lmcjl.com/index?param=10路径和查询字符串之间使用问号
?
隔开。上述示例的域名为 www.lmcjl.com,路径为 index,查询字符串为 param=1。?
:用于分隔路径和查询参数等。=
用于表示查询参数中的键值对。&
符号用于分隔查询多个键值对。其余常用的保留字符有:/ . ... # @ $ + ; %
- _ . ~ ! *
这 6 个特殊字符。当在 URL 中使用不属于 ASCII 字符集的字符时,就要使用特殊的符号对该字符进行编码,比如空格需要用%20
来表示。[ ] < > " " { } | \ ^ * · ‘ ’ 等下面示例,查询字符串中包含一些特殊字符,这些特殊字符不需要编码:
http://www.lmcjl.com/index?param=10!*¶m1=20!-~_下表对 URL 中部分保留字符和不安全字符进行了说明:
字符 | 含义 | 十六进制值编码 |
---|---|---|
+ | URL 中 + 号表示空格 | %2B |
空格 | URL中的空格可以编码为 + 号或者 %20 | %20 |
/ | 分隔目录和子目录 | %2F |
? | 分隔实际的 URL 和参数 | %3F |
% | 指定特殊字符 | %25 |
# | 表示书签 | %23 |
& | URL 中指定的参数间的分隔符 | %26 |
= | URL 中指定参数的值 | %3D |
urllib.parse
模块中提供了用来编码和解码的方法,分别是 urlencode() 与 unquote() 方法。方法 | 说明 |
---|---|
urlencode() | 该方法实现了对 url 地址的编码操作 |
unquote() | 该方法将编码后的 url 地址进行还原,被称为解码 |
https://www.baidu.com/s?wd=爬虫&rsv_spt=1&rsv_iqid=0xa3ca348c0001a2ab&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=ib&rsv_sug3=8&rsv_sug1=7&rsv_sug7=101
可以看出 URL 中有很多的查询字符串,而第一个查询字符串就是“wd=爬虫”,其中 wd 表示查询字符串的键,而“爬虫”则代表您输入的值。https://www.baidu.com/s?wd=爬虫
使用搜索修改后的 URL 进行搜索,依然会得到相同页面。因此可知“wd”参数是百度搜索的关键查询参数。下面编写爬虫程序对 “wd=爬虫”进行编码,如下所示:#导入parse模块 from urllib import parse #构建查询字符串字典 query_string = { 'wd' : '爬虫' } #调用parse模块的urlencode()进行编码 result = parse.urlencode(query_string) #使用format函数格式化字符串,拼接url地址 url = 'http://www.baidu.com/s?{}'.format(result) print(url)输出结果,如下所示:
wd=%E7%88%AC%E8%99%AB
http://www.baidu.com/s?wd=%E7%88%AC%E8%99%AB
from urllib import parse #注意url的书写格式,和 urlencode存在不同 url = 'http://www.baidu.com/s?wd={}' word = input('请输入要搜索的内容:') #quote()只能对字符串进行编码 query_string = parse.quote(word) print(url.format(query_string))输出结果如下:
输入:请输入要搜索的内容:编程帮www.lmcjl.com 输出:http://www.baidu.com/s?wd=%E7%BC%96%E7%A8%8B%E5%B8%AEwww.lmcjl.com注意:quote() 只能对字符串编码,而 urlencode() 可以直接对查询字符串字典进行编码。因此在定义 URL 时,需要注意两者之间的差异。方法如下:
# urllib.parse urllib.parse.urlencode({'key':'value'}) #字典 urllib.parse.quote(string) #字符串
from urllib import parse string = '%E7%88%AC%E8%99%AB' result = parse.unquote(string) print(result)输出结果:
爬虫
# 1、字符串相加 baseurl = 'http://www.baidu.com/s?' params='wd=%E7%88%AC%E8%99%AB' url = baseurl + params # 2、字符串格式化(占位符) params='wd=%E7%88%AC%E8%99%AB' url = 'http://www.baidu.com/s?%s'% params # 3、format()方法 url = 'http://www.baidu.com/s?{}' params='wd=%E7%88%AC%E8%99%AB' url = url.format(params)
本文链接:http://task.lmcjl.com/news/18098.html