Python3中如何替换“from urllib2 import Request, urlopen”语句?
在Python3中替换urllib2的Request和urlopen
嘿,这个问题我之前切换Python版本时也踩过坑!Python3已经把urllib2模块的功能拆分迁移到urllib.request模块里了,只需要调整导入语句就能解决,给你整理好修改后的代码和说明:
修改后的完整代码片段
from urllib.request import Request, urlopen # 这行是核心修改 import json from pandas.io.json import json_normalize # ... 你的其他业务代码 ... # 注意:把URL里的&换成&更规范,不需要HTML实体转义 request = Request('http://maps.googleapis.com/maps/api/elevation/json?locations=' + path1 + '&sensor=false') response = urlopen(request) elevations = response.read().decode('utf-8') # 建议加上解码,把字节流转成字符串 data = json.loads(elevations) # ... 后续的数据处理代码 ...
关键细节说明
- 模块迁移:Python3彻底移除了
urllib2,所有请求相关的类(比如Request)和方法(比如urlopen)都放到了urllib.request模块下,所以必须修改导入语句。 - 字节流解码:
urlopen返回的响应调用read()得到的是字节类型数据,加上.decode('utf-8')转成字符串,能避免某些情况下json.loads报错。 - URL优化:你原URL里的
&是HTML实体转义,直接换成&在Python字符串里更合适,不会影响请求的发送。
另外补充个小提示:如果你的pandas版本比较新,pandas.io.json.json_normalize已经被移到顶层模块了,改成from pandas import json_normalize会更稳妥,不过这和你当前的urllib问题无关,可以后续遇到报错再调整。
内容的提问来源于stack exchange,提问作者tohardtme
相关产品推荐
相关产品推荐

