HTTPError:禁止 - 文件“/home/evans/anaconda3/envs/myenv/lib/python3.8/urllib/request.py”,
Posted
技术标签:
【中文标题】HTTPError:禁止 - 文件“/home/evans/anaconda3/envs/myenv/lib/python3.8/urllib/request.py”,【英文标题】:HTTPError: Forbidden - File "/home/evans/anaconda3/envs/myenv/lib/python3.8/urllib/request.py", 【发布时间】:2020-07-09 19:08:22 【问题描述】:您好,我正在尝试运行下面的代码,但出现错误,HTTPError: Forbidden。它告诉我有问题的行在 urllib 文件夹中的 requests.py 文件中。我想从在线网站中提取数据。
这是我尝试运行的代码
import pandas as pd
import geopandas as gpd
data = pd.read_html('https://www.worldometers.info/coronavirus/')
这是我从 spyder 控制台得到的响应
Python 3.8.2 (default, Mar 26 2020, 15:53:00)
输入“copyright”、“credits”或“license”了解更多信息。
IPython 7.13.0 -- 增强的交互式 Python。
runfile('/home/evans/Desktop/GIS DEVELOPMENTS/PROJECTS/Coronavirus2020.py', wdir='/home/evans/Desktop/GIS DEVELOPMENTS/PROJECTS') Traceback(最近一次调用最后一次):
文件“/home/evans/Desktop/GIS DEVELOPMENTS/PROJECTS/Coronavirus2020.py”,第 5 行,在 数据 = pd.read_html('https://www.worldometers.info/coronavirus/')
文件“/home/evans/anaconda3/envs/myenv/lib/python3.8/site-packages/pandas/io/html.py”,第 1085 行,在 read_html 返回_解析(
文件“/home/evans/anaconda3/envs/myenv/lib/python3.8/site-packages/pandas/io/html.py”,第 895 行,在 _parse 表 = p.parse_tables()
文件“/home/evans/anaconda3/envs/myenv/lib/python3.8/site-packages/pandas/io/html.py”,第 213 行,在 parse_tables 表 = self._parse_tables(self._build_doc(), self.match, self.attrs)
文件“/home/evans/anaconda3/envs/myenv/lib/python3.8/site-packages/pandas/io/html.py”,第 733 行,在 _build_doc 提高e
文件“/home/evans/anaconda3/envs/myenv/lib/python3.8/site-packages/pandas/io/html.py”,第 714 行,在 _build_doc 使用 urlopen(self.io) 作为 f:
文件“/home/evans/anaconda3/envs/myenv/lib/python3.8/site-packages/pandas/io/common.py”,第 141 行,在 urlopen 返回 urllib.request.urlopen(*args, **kwargs)
文件“/home/evans/anaconda3/envs/myenv/lib/python3.8/urllib/request.py”,第 222 行,在 urlopen return opener.open(url, data, timeout)
文件“/home/evans/anaconda3/envs/myenv/lib/python3.8/urllib/request.py”,第 531 行,打开 response = meth(req, response)
文件“/home/evans/anaconda3/envs/myenv/lib/python3.8/urllib/request.py”,第 640 行,在 http_response 响应 = self.parent.error(
文件“/home/evans/anaconda3/envs/myenv/lib/python3.8/urllib/request.py”,第 569 行,错误 return self._call_chain(*args)
文件“/home/evans/anaconda3/envs/myenv/lib/python3.8/urllib/request.py”,第 502 行,在 _call_chain 结果 = func(*args)
文件“/home/evans/anaconda3/envs/myenv/lib/python3.8/urllib/request.py”,第 649 行,在 http_error_default 引发 HTTPError(req.full_url, code, msg, hdrs, fp)
HTTPError: 禁止
一开始的问题是缺少 lxml,所以我决定使用 pip3 install lxml
从我的环境中安装它,但这是我得到的返回消息。
Requirement already satisfied: lxml in /usr/lib/python3/dist-packages (4.4.1).
但这不在我的环境文件夹中,它在 base/root 文件夹中。所以我只是决定使用 pip install lxml 并且它有效。然后当我执行它时,它返回了上述错误。
如果有任何指导可以帮助我克服这个问题,我将不胜感激。
【问题讨论】:
“一开始的问题是缺少 lxml,所以我决定使用 pip3 install lxml 从我的环境中安装它,但这是我得到的返回消息。”:这是一个非常糟糕的举动因为 pip 和 conda 包不是二进制兼容的。因此,您能做的最好的事情就是删除并重新创建您的环境并(从现在开始)使用 conda 而不是 pip 来安装您的包(除非 conda 没有相应的包)。 好的,非常感谢,让我重新创建它。但是当我想使用 Conda install LXML 在我的环境中安装 LXML 包时,它返回解决环境错误。但是在基本目录中,它已经安装,所以它说满足要求。那是我决定改用 pip 的时候。你能帮我找到另一个选项来确保它安装在我的环境中吗?这就是我出现 HTTPError: Forbidden 的原因 也许 Python 3.8 有问题,所以我建议你改用 3.7。 【参考方案1】:可能是网站阻止了抓取。也许……
HTTP error 403 in Python 3 Web Scraping
因此尝试...
from urllib.request import Request, urlopen
req = Request('https://www.worldometers.info/coronavirus/', headers='User-Agent': 'Mozilla/5.0')
webpage = urlopen(req).read()
tables = pd.read_html(webpage)
df = tables[0]
print(df.head())
输出:
Country,Other TotalCases NewCases TotalDeaths NewDeaths TotalRecovered \
0 USA 123781 +203 2229.0 +8 3238.0
1 Italy 92472 NaN 10023.0 NaN 12384.0
2 Spain 78797 +5,562 6528.0 +546 14709.0
3 Germany 58247 +552 455.0 +22 8481.0
4 Iran 38309 +2,901 2640.0 +123 12391.0
ActiveCases Serious,Critical Tot Cases/1M pop Deaths/1M pop 1stcase
0 118314 2666.0 374.0 7.0 Jan 20
1 70065 3856.0 1529.0 166.0 Jan 29
2 57560 4165.0 1685.0 140.0 Jan 30
3 49311 1581.0 695.0 5.0 Jan 26
4 23278 3206.0 456.0 31.0 Feb 18
【讨论】:
非常感谢。让我试试看。以上是关于HTTPError:禁止 - 文件“/home/evans/anaconda3/envs/myenv/lib/python3.8/urllib/request.py”,的主要内容,如果未能解决你的问题,请参考以下文章
SEC EDGAR 13F 源 HTTPError:HTTP 错误 403:禁止
HTTPError:HTTP 错误 403:在 Google Colab 上被禁止
urllib.error.HTTPError:HTTP 错误 403:使用 urllib.requests 禁止
来自 Python AppEngine 的 Google Url Shortener API:HTTPError:HTTP 错误 403:禁止