Python新手开发web爬虫运行时报urlib3模块找不到错误求助
报错原因与对应解决方法
触发当前报错的核心问题
- import语句的模块名称拼写错误:代码中写的
import urlib3漏写了字母r,正确的已安装模块名是urllib3。这是当前ModuleNotFoundError的直接诱因:Python执行导入时,会严格按照你写的模块名寻找名为urlib3的包,自然会触发找不到模块的报错,和你环境中是否安装了urllib3没有关系——因为你要找的根本不是同一个模块名。 - 代码存在后续的API调用错位:就算修正了import的拼写问题,后面的
urllib.urlopen("http://www.google.com/")依然会触发报错:- 这段代码调用的
urllib是Python内置标准库,你既没有在脚本里导入这个模块,也没有把它和你前面导入的第三方urllib3做关联,会直接触发未定义名称的报错 - Python3版本已经将原urllib的功能拆分到多个子模块中,原本Python2时代直接调用的
urllib.urlopen方法已经被移到urllib.request模块下,已经无法像旧版本一样直接调用。
- 这段代码调用的
修正后的参考实现
如果使用已安装的第三方urllib3发起请求,参考代码结构如下:
#!/usr/bin/env python3 # 导入第三方依赖 import urllib3 from bs4 import BeautifulSoup import csv # 初始化请求管理器 http_client = urllib3.PoolManager() # 发起请求 response = http_client.request("GET", "http://www.google.com/") # 读取响应内容 html_text = response.data.decode("utf-8")
如果选择使用Python自带的内置urllib标准库发请求,不需要额外安装第三方包,按Python3的导入规则写即可:
#!/usr/bin/env python3 from urllib.request import urlopen resp = urlopen("http://www.google.com/") html_text = resp.read().decode("utf-8")
额外注意区分
- 第三方库urllib3和Python内置标准库urllib是两个完全独立的工具,不要混淆导入和调用逻辑:
- urllib3需要通过pip安装,功能更完善,是目前常用的第三方请求工具
- urllib是Python自带的标准库,不需要额外安装,需要按子模块路径导入后调用。
内容的提问来源于stack exchange,提问作者Lien Lien
相关产品推荐
相关产品推荐

