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, encodingutf-8) print(encode_str) # URL解码 decode_str unquote(encode_str, encodingutf-8) print(decode_str)六、实例分析1.搜狗搜索如下图所示网址为https://www.sogou.com2.在搜狗搜索中输入“爬虫”两个字进行测试如下图所示。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 urlhttps://www.sogou.com/web? param{ query:爬虫 } new_paramurllib.parse.urlencode(param) #print(new_param) urlurlnew_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 } requesturllib.request.Request(urlurl,headersheaders) responseurllib.request.urlopen(request) contentresponse.read().decode(utf-8) with open(sogou.html,w,encodingutf-8)as fp: fp.write(content)此时便获得了带有特殊字符“爬虫”的搜索网址。