HTTPError: Forbidden - файл "/home/evans/anaconda3/envs/myenv/lib/python3.8/urllib/request.py", - PullRequest
0 голосов
/ 29 марта 2020

Привет! Я пытаюсь запустить приведенный ниже код и получаю сообщение об ошибке HTTPError: Forbidden. Это говорит мне о том, что строка с проблемой находится в файле questions.py в папке urllib. Я хотел извлечь данные из интернет-сайта.

Это мой код, который я пытаюсь запустить

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» для получения дополнительной информации.

I Python 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 return _parse (

File "/home/evans/anaconda3/envs/myenv/lib/python3.8/site-packages/pandas/io/html.py", строка 895, в _parse tables = p.parse_tables ()

File "/ home / evans / anaconda3 / envs / myenv / lib / python3 .8 / site-packages / pandas / io / html .py ", строка 213, в таблицах parse_tables = self._parse_tables (self._build_do c (), 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 return 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, в открытый ответ = meta (req, response)

Файл "/home/evans/anaconda3/envs/myenv/lib/python3.8/urllib/request.py", строка 640, в http_response response = self.pa rent.error (

Файл "/home/evans/anaconda3/envs/myenv/lib/python3.8/urllib/request.py", строка 569, при ошибке верните self._call_chain (* args )

Файл "/home/evans/anaconda3/envs/myenv/lib/python3.8/urllib/request.py", строка 502, в _call_chain result = fun c (* 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: Forbidden

Сначала проблема заключалась в том, что l xml отсутствовал, поэтому я решил установить его из своей среды, используя pip3 install lxml, но это ответное сообщение, которое я получил.

Requirement already satisfied: lxml in /usr/lib/python3/dist-packages (4.4.1).

Но это не в моей папке окружения, это в папке base / root. Поэтому я решил использовать pip install l xml, и это сработало. Затем, когда я выполнил его, он вернул вышеуказанную ошибку.

Я буду признателен за любые рекомендации, которые помогут мне преодолеть эту проблему.

1 Ответ

0 голосов
/ 29 марта 2020

Это, вероятно, сайт, блокирующий очистку. Возможно ...

Ошибка HTTP 403 в 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  
...