Erreur pd.read_html client distant déconnecté

Oct 21 2020

Hier, le code suivant me donnait le dataframe sans problème. Mais aujourd'hui, cela a commencé à me donner l'erreur suivante:

  http.client.RemoteDisconnected: Remote end closed connection without response

Toute solution? Je sais que le problème vient du site Web, mais j'ai besoin d'une solution qui puisse m'aider à continuer à utiliser le même code

import datetime
import pandas as pd
import sqlalchemy


from datetime import datetime
from datetime import date, timedelta

#d = datetime.today().strftime('%d-%m-%Y')
data_atual=datetime.now()
mes_atual = data_atual.month
ano_atual= data_atual.year

df = []


for j in range (2020, ano_atual+1):

    for i in range (9,13):

           frame = []


           df1 = pd.read_html('https://www.centrodeinformacao.ren.pt/userControls/GetExcel.aspx?T=REN_MENSAL&P='+str(j)+'&PP='+str(i)+'&PPP=26&PPPP=36&PPPPP=0&variation=PT', decimal=',', thousands=',')[0]
           df2 = pd.read_html('https://www.centrodeinformacao.ren.pt/userControls/GetExcel.aspx?T=REN_MENSAL&P='+str(j)+'&PP='+str(i)+'&PPP=26&PPPP=36&PPPPP=0&variation=PT', decimal=',', thousands=',')[2]


           frame.append(df1)
           frame.append(df2)
           print(frame)
           result = pd.concat(frame)
           print(result)
           engine = sqlalchemy.create_engine('mysql+pymysql://root:1234@localhost:3306/projeto')


           result.to_sql(
              name='renmensal'+str(i)+str(j),  # database table name
              con=engine,
              if_exists='replace',
              index=False
             )

Réponses

AndrejKesely Oct 21 2020 at 09:48

L'erreur est du côté du serveur - parfois le serveur renvoie une erreur. Une solution de contournement consiste à répéter les demandes jusqu'à succès, par exemple:

import http
import pandas as pd

j = 2020
i = 9

url = 'https://www.centrodeinformacao.ren.pt/userControls/GetExcel.aspx?T=REN_MENSAL&P='+str(j)+'&PP='+str(i)+'&PPP=26&PPPP=36&PPPPP=0&variation=PT'

while True:
    try:
        df1 = pd.read_html(url, decimal=',', thousands=',')[0]
        break
    except http.client.RemoteDisconnected as e:
        continue

print(df1)

Impressions:

                                  0  ...                    6
0                     CONSUMO [GWh]  ...  Variação Acumulada:
1                            Quebra  ...                  NaN
2                      Fios de Água  ...                 78.2
3                        Albufeiras  ...                 58.0
4    Total Hídrica Regime Ordinário  ...                 67.8
5                             Sines  ...                -77.7
6                          Ribatejo  ...                 -3.2
7                             Lares  ...                  3.0
8                         Pego C.C.  ...                 35.0
9                              Pego  ...                -64.6
10                   T.Outeiro C.C.  ...                  3.6
11   Total Térmica Regime Ordinário  ...                -20.7
12           TOTAL PRODUÇÃO LÍQUIDA  ...                  5.3
13           Importação (Comercial)  ...                -10.1
14           Exportação (Comercial)  ...                 66.0
15                 SALDO IMPORTADOR  ...                -43.9
16                       Hidráulica  ...                 37.9
17                          Térmica  ...                  3.9
18                           Eólica  ...                 -9.1
19                     Fotovoltaica  ...                 16.7
20                            Ondas  ...                  NaN
21   TOTAL PRODUÇÃO REGIME ESPECIAL  ...                 -1.3
22                    PRE Renovável  ...                 -0.6
23          BOMBAGEM HIDROELÉCTRICA  ...                 24.2
24                          CONSUMO  ...                 -3.5
25  Evolução corr.temp e dias úteis  ...                 -4.2
26     Consumo Mercado Liberalizado  ...                  ---
27         Consumo Mercado Regulado  ...                  ---

[28 rows x 7 columns]