3.url编码
一、url 是什么
URL 编码也叫百分号编码,就是把URL 里不能直接传输、有特殊含义、中文 / 空格等字符,转成%两位十六进制数的格式,让浏览器和服务器能正常识别、不报错。
二、为什么需要 URL 编码
有特殊含义的字符
比如? = & / #
这些在 URL 里是分隔符,如果你要把它们当作普通文字传参数,不编码服务器会解析错乱。中文、空格、特殊符号
URL 标准只能用英文字母、数字、少量符号,中文、空格、emoji必须编码才能传输。避免乱码、参数错位、接口报错
爬虫、接口请求、拼接 GET 参数时,不编码极易参数失效、404、参数被截断。
三、url 编码规则
- 空格 → 常编码为
%20 - 中文 / 符号 → 按UTF-8先转字节,再每字节加
%转十六进制
四、日常用到的场景
爬虫拼接 GET 请求参数
接口传中文、特殊符号参数
浏览器地址栏自动转码
登录 Cookie、token 里的特殊字符处理
五、python编码/解码
from urllib.parse import quote, unquote # URL编码 s = "你好 测试&name=张三" encode_str = quote(s, encoding="utf-8") print(encode_str) # URL解码 decode_str = unquote(encode_str, encoding="utf-8") print(decode_str)六、实例分析
1.搜狗搜索如下图所示,网址为https://www.sogou.com
2.在搜狗搜索中输入“爬虫”两个字进行测试,如下图所示。
3.搜索结果如下图所示,网址发生了以下变化。这时将网址内容进行解析,即可获得正确的带有“爬虫”关键字的搜狗搜索网址。(只提取关键内容即可)
4.使用原网址+搜索关键字所合成的的网址进行网页解析,使用字符串的连接方式进行连接,具体代码如下所示。
import urllib.request import urllib.parse # 这是搜狗搜索的网址 # 'https://www.sogou.com/web?query=爬虫' # 'https://www.sogou.com/web?query=%E7%88%AC%E8%99%AB' url="https://www.sogou.com/web?" param={ 'query':"爬虫" } new_param=urllib.parse.urlencode(param) #print(new_param) url=url+new_param #print(url) headers={ 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36' } request=urllib.request.Request(url=url,headers=headers) response=urllib.request.urlopen(request) content=response.read().decode('utf-8') with open('sogou.html','w',encoding='utf-8')as fp: fp.write(content)此时,便获得了带有特殊字符“爬虫”的搜索网址。
