目标url发请求
{“errorCode”:50} ,把_o
url = ‘https://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule’
构建请求对象
req = urllib.request.Request(url, data=data, headers=headers)
发请求,获取响应对象
res = urllib.request.urlopen(req)
print(res.getcode()) # 得到响应码,200表示请求成功
html = res.read().decode(‘utf-8’)
print(type(html)) # <class ‘str’>,得到的是json数据
json数据转字典
dic = json.loads(html)
result = dic[“translateResult”] # [[{‘src’: ‘你好’, ‘tgt’: ‘hello’}]]
print(result[0][0][‘tgt’])
另一个简单的示例:
import urllib.request # 导入urllib.request模块
import urllib.parse # 导入urllib.parse模块
url = ‘https://www.httpbin.org/post’ # post请求测试地址
将表单数据转换为bytes类型,并设置编码方式为utf-8
print()
data = bytes(urllib.parse.urlencode({‘hello’: ‘python’}), encoding=‘utf-8’)
response = urllib.request.urlopen(url=url, data=data) # 发送网络请求
print(response.read().decode(‘utf-8’)) # 读取HTML代码并进行
================================================================================
urlopen()的timeout参数用于设置请求超时,该参数以秒为单位,表示如果在请求时超出了设置的时间还没有得到响应时就会抛出异常。
import urllib.request
url = ‘https://www.python.org/’
response = urllib.request.urlopen(url=url, timeout=0.1) # 设置超时时间为0.1秒
print(response.read().decode(‘utf-8’))
因为0.1秒设置的过快,结果因超时而产生异常,报错。
通常根据网络环境不同,设置一个合理的时间,如2秒,3秒。
对该网络超时异常进行捕捉并处理:
import urllib.request # 导入urllib.request模块
import urllib.error # 导入urllib.error模块
import socket # 导入socket模块
url = ‘https://www.python.org/’ # 请求地址
try:
发送网络请求,设置超时时间为0.1秒
response = urllib.request.urlopen(url=url, timeout=0.1)
print(response.read().decode(‘utf-8’)) # 读取HTML代码并进行utf-8解码
except urllib.error.URLError as error: # 处理异常
if isinstance(error.reason, socket.timeout): # 判断异常是否为超时异常
print(‘当前任务已超时,即将执行下一任务!’)
6. 复杂网络请求_urllib.request.Request()
==========================================================================================================
urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
参数说明:
-
url:访问网站的完整url地址
-
data:默认为N