urllib.parse
from urllib import parse
为什么编码
- url 中有中文问题
- url 中有& 符号 会截断
对查询字符串中的 key = ‘中文’ 编码
from urllib import parse
parse.urlencode({key:"中文"})
只对中文编码
parse.quote("中文")
unquote(xxxx)# 解码
编码后对url 拼接
编码方式
from urllib import parse
url = "http://www.baidu.com/s?wd=成龙"
#输入浏览器地址栏,回车
#在复制地址,到txt中
#https://www.baidu.com/s?wd=%E6%88%90%E9%BE%99
#对中文编码
#
#程序实现
p1,p2 = url.split("?")
k,v = p2.split("=")
dict_ = {k:v}
r = parse.urlencode(dict_) #编码字典
# 'wd=%E6%88%90%E9%BE%99' 编码多个kv,会自动&拼接
url = p1+"?"+r
"""
#http://www.baidu.com/s?wd=%E6%88%90%E9%BE%99
#可以将该地址,放入浏览器地址栏测试
# %s 拼接
# "{} ".format(x)
"""
多个 k=“小明”&k2=“小红”&k3=“小兰”
只需要将 多个k.v 组合成字典,编码后自动& 拼接
小练习
用户输入关键字,回车
程序请求百度页面http://www.baidu.com/s?wd=关键字
将页面内容保存在 ‘关键字.html’
keyword = input("请输入:").strip()
#编码
from urllib import parse
r = parse.urlencode({"wd":keyword})
#拼接
url = "http://www.baidu.com/s?{}".format(r)
#发请求
import requests
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"}
res = requests.get(url,headers=headers)
res.encoding = "utf-8" #以猜测的编码方式 解码--》text
#res.content.decode("utf-8")
#存储
with open("{}.html".format(keyword),"w",encoding="utf-8") as f:
f.write(res.text)
#获取的页面有反爬机制
文本编码
win 默认 gbk /gb2312/gb18030
linux 默认 utf-8