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”,的主要内容,如果未能解决你的问题,请参考以下文章

HTTPError:HTTP 错误 403:禁止

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:禁止

IIS 10.0 HTTP 错误 403.0 - 禁止