urllib下post请求百度翻译

post 请求方式的参数,必须编码

参数是放在请求对象定制的方法中

编码之后之后必须调用 encode 方法中,encode()的作用是变慢,deconde()是解码。

import urllib.parse
import urllib.request
# post 请求

url = 'https://fanyi.baidu.com/sug' # Request url

data = {
    'kw':'spider'
}

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0'
}

# post请求的参数,必须要进行编码,必须使用 urllib.parse.urlencode()
data = urllib.parse.urlencode(data).encode('utf-8')

# post的请求的参数,是不会拼接在url的后面的,而是需要放在请求对象定制的参数中
request = urllib.request.Request(url=url,data=data,headers=headers)

# 模拟浏览器使用请求对象
response = urllib.request.urlopen(request)

content = response.read().decode('utf-8')

print(content)

输出的是一个json字符串数据。

字符串 转 json 对象

obj = json.loads(content)

print(obj)

==>
{'errno': 0, 'data': [{'k': 'spider', 'v': 'n. 蜘蛛; 星形轮,十字叉; 带柄三脚平底锅; 三脚架'}, {'k': 'Spider', 'v': '[电影]蜘蛛'}, {'k': 'SPIDER', 'v': 'abbr. SEMATECH process induced damage effect revea'}, {'k': 'spiders', 'v': 'n. 蜘蛛( spider的名词复数 )'}, {'k': 'spidery', 'v': 'adj. 像蜘蛛腿一般细长的; 象蜘蛛网的,十分精致的'}], 'logid': 2300630547}

这里额外使用 urllib.parse.urlencode() 的原因是为了 ​​符合 HTTP POST 请求的标准格式​​,而不仅仅是简单的字符串编码。
urlencode() 会把字典 {'kw': 'spider'} 转换成 kw=spider 的形式(即 key=value 的 URL 查询字符串格式)。
这是 HTTP application/x-www-form-urlencoded 的标准格式,服务器才能正确解析,然后将这类 key=value 转换成对应的utf-8

网络传输的本质是字节流​​:数据在网络上传输时,底层协议(如 TCP/IP)处理的是二进制数据(字节),而不是文本(字符串)。
​​字符编码的作用​​:UTF-8 是一种字符编码方式,它把字符串(如 "kw=spider")转换成字节(如 b'kw=spider'),以便计算机和网络能正确传输和解析。

posted @ 2025-07-06 10:39  takenika  阅读(6)  评论(0)    收藏  举报