【问题标题】:import error: cannot import name 'HTTPError' from urllib3.exceptions导入错误:无法从 urllib3.exceptions 导入名称“HTTPError”
【发布时间】:2019-02-27 06:22:06
【问题描述】:

我有一个 .py 文件,用于使用 selenium 和 phantomjs 从 gasbuddy 抓取 gas 价格。它曾经工作过,但突然停止了。所以我卸载并重新安装了 selenium 和 phantomJS。我使用自制软件卸载并重新安装了 Python 3。我什至删除了我的 MacBook 并在其上重新安装了 Sierra,然后重新安装了其他所有东西对我来说没有意义的是,我遇到了我什至没有导入的模块的导入错误。

import os
from selenium import webdriver
import warnings

warnings.filterwarnings("ignore")
driver = webdriver.PhantomJS(service_log_path=os.path.devnull)

driver.get('https://www.gasbuddy.com/station/155967')
price = driver.find_element_by_xpath('//*[@id="container"]/div/div[3]/div/div/div/div[1]/div[2]/div[1]/div/div/div/div/h1')
print(price.text)

我得到的错误是:

Traceback (most recent call last):
  File "/Users/igisan/Desktop/scripts/gas.py", line 2, in <module>
    from selenium import webdriver
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/__init__.py", line 18, in <module>
    from .firefox.webdriver import WebDriver as Firefox  # noqa
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 29, in <module>
    from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 27, in <module>
    from .remote_connection import RemoteConnection
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/remote_connection.py", line 24, in <module>
    import urllib3
  File "/usr/local/lib/python3.7/site-packages/urllib3/__init__.py", line 8, in <module>
    from .connectionpool import (
  File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 11, in <module>
    from .exceptions import (
  File "/usr/local/lib/python3.7/site-packages/urllib3/exceptions.py", line 2, in <module>
    from .packages.six.moves.http_client import (
  File "/usr/local/lib/python3.7/site-packages/urllib3/packages/six.py", line 203, in load_module
    mod = mod._resolve()
  File "/usr/local/lib/python3.7/site-packages/urllib3/packages/six.py", line 115, in _resolve
    return _import_module(self.mod)
  File "/usr/local/lib/python3.7/site-packages/urllib3/packages/six.py", line 82, in _import_module
    __import__(name)
  File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 71, in <module>
    import email.parser
  File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/email/parser.py", line 12, in <module>
    from email.feedparser import FeedParser, BytesFeedParser
  File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/email/feedparser.py", line 27, in <module>
    from email._policybase import compat32
  File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/email/_policybase.py", line 9, in <module>
    from email.utils import _has_surrogates
  File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/email/utils.py", line 33, in <module>
    from email._parseaddr import quote
  File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/email/_parseaddr.py", line 16, in <module>
    import time, calendar
  File "/Users/igisan/Desktop/scripts/calendar.py", line 2, in <module>
    from pyicloud import PyiCloudService
  File "/usr/local/lib/python3.7/site-packages/pyicloud/__init__.py", line 2, in <module>
    from pyicloud.base import PyiCloudService
  File "/usr/local/lib/python3.7/site-packages/pyicloud/base.py", line 7, in <module>
    import requests
  File "/usr/local/lib/python3.7/site-packages/requests/__init__.py", line 46, in <module>
    from .exceptions import RequestsDependencyWarning
  File "/usr/local/lib/python3.7/site-packages/requests/exceptions.py", line 9, in <module>
    from urllib3.exceptions import HTTPError as BaseHTTPError
ImportError: cannot import name 'HTTPError' from 'urllib3.exceptions' (/usr/local/lib/python3.7/site-packages/urllib3/exceptions.py)

我什至更新了所有内容。安装和重新安装 urllib 并没有什么不同。我也尝试过使用其他网络抓取方法(lxml 等)但无济于事。有答案吗?

【问题讨论】:

    标签: python python-3.x selenium selenium-webdriver webdriver


    【解决方案1】:

    tl;dr
    您有一个循环导入 urllib3.exceptions/Users/igisan/Desktop/scripts/calendar.py 隐藏了 Python 标准库的 calendar 模块。重命名该模块。

    您的 Python 环境看起来有点乱。导入webdriver 看起来很正常,直到urllib3.exceptions 的基础导入解析http.client 不是本地Python 3.7 解释器的站点包,而是似乎是Python 3.7.2 的自制安装的站点包在/usr/local/Cellar下。

      File "/usr/local/lib/python3.7/site-packages/urllib3/packages/six.py", line 82, in _import_module
        __import__(name)
      File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", line 71, in <module>
        import email.parser
    

    从那里开始,您在该自制模块中拥有正常的导入链,直到 email._parseaddr 尝试导入 calendar
    此导入应转到 Python 标准库中的 calendar.py 模块,但由于您的 /Users/igisan/Desktop/scripts 文件夹中有一个 calendar.py,显然已添加到 sys.path(可能是通过 PYTHONPATH)解释器解析为你的 calendar.py

      File "/usr/local/Cellar/python/3.7.2_2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/email/_parseaddr.py", line 16, in <module>
        import time, calendar
      File "/Users/igisan/Desktop/scripts/calendar.py", line 2, in <module>
        from pyicloud import PyiCloudService
    

    你的 calendar.pypyicloud 包中导入一些类,这会导致尝试导入requests,这会导致尝试导入urllib3.exceptions
    此时这将成为循环导入。导入 urllib3.exceptions 会导致导入尝试导入 urllib3.exceptions 的模块。
    这个问题应该通过将 /Users/igisan/Desktop/scripts/calendar.py 重命名为不影响标准库中的模块 calendar 的名称来解决。

    【讨论】:

      【解决方案2】:

      将主模块重命名为email.py 后,我遇到了同样的问题。它开始与库 requestsselenium 发生冲突。从 email.py 重命名为更原始的名称后,错误消失了。

      【讨论】:

        猜你喜欢
        • 2019-03-12
        • 2021-12-21
        • 2022-01-27
        • 2021-09-10
        • 2020-04-17
        • 1970-01-01
        • 2022-06-21
        • 2022-12-08
        • 2022-11-29
        相关资源
        最近更新 更多