Przerywanie połączenia

0

Witam,
Podczas pobierania danych ze strony internetowej wyskoczyło mi coś takiego w terminalu :

requests.exceptions.ChunkedEncodingError: ("Connection broken: ConnectionAbortedError(10053, 'Nawiązane połączenie zostało przerwane przez oprogramowanie zainstalowane w komputerze-hoście', None, 10053, None)", ConnectionAbortedError(10053, 'Nawiązane połączenie zostało przerwane przez oprogramowanie zainstalowane w komputerze-hoście', None, 10053, None))

W jaki sposób powinienem się do tego zabrać?

0
import json
import time
import pprint
import re
import sys
import urllib
import smtplib
import requests
import random

from bs4 import BeautifulSoup
from email.mime.text import MIMEText
from email.header import Header

lista3 = []
lista = []
Zakazana_Lista = [] # Konieczne do zabezpieczenia przed ponownym wysyłaniem
tablica_minut = []
########################### POBIERANIE LINKÓW DO MECZY NA ŻYWO ###################################################

while(True):
 Randomowy_Czas2 = random.randint(6,10)
 time.sleep(Randomowy_Czas2)
 url = "https://fb.oddsportal.com/feed/livegames/live/3/0.dat?_{}".format(int(time.time() * 1000))
 headers = {
     'User-Agent': 'curl/7.64.0',
     'Referer': 'https://www.oddsportal.com/inplay-odds/live-now/basketball/',
     }
 page = requests.get(url, headers=headers)

 
 result = re.search("globals.jsonpCallback\('/feed/livegames/live/3/0.dat', (.*)\);", page.text)
 if not result:
     sys.exit("Result not found")

 json_text = result.group(1)
 json_data = json.loads(json_text).get('d')

 soup = BeautifulSoup(json_data.get('text', ''), 'html.parser')
 nameList = soup.findAll('td',{'class':'name table-participant'})
 
 ######################################################################################################################## 
 ####################################### PRZESIEW LINKOW ################################################################ 
 
 for name in nameList:
     if f"{name.find('a', href=True).get('href')}"=="javascript:void(0);":
         continue
     else:
         Link = ("https://www.oddsportal.com"f"{name.find('a', href=True).get('href')}")  
         url = Link
         headers = {
             'User-Agent': 'curl/7.64.0',
             'Referer': 'https://www.oddsportal.com/inplay-odds/live-now/basketball/',
             }
         page = requests.get(url, headers=headers)
         soup1 = BeautifulSoup(page.text, 'html.parser')

         czas = soup1.find('p',{'class':'result-live'})
         punkty = soup1.find('span',{'class':'live-score'})
         print(czas)
         
         if punkty is None:
             print("natrafilismy na pulapke 1 i pomijamy")
             continue
         if (czas == str('<p class="result-live"></p>')) or (czas is None): ### NONE dla meczy skonczonych #### <p class="result-live"></p> dla rozpoczynających
             print("natrafilismy na pulapke 2 i pomijamy")
             continue
         
         ############################################################################################################################################################
         ############################################################# WARUNEKI NA POLOWE MECZU ####################################################################################
         
         if czas.find('strong').text == "Half-time 10" + "\'" or czas.find('strong').text == "Half-time 12" + "\'" or czas.find('strong').text == "Half-time" or czas.find('strong').text == "Half-time 9" +"\'" :
             ###############################################################################################################################################
             ############################################## ZBIERANIE DANYCH DO WARUNKU "KWARTA PONIZEJ 10 PKT" ###########################################
             
             jedynka = czas.text
             Znak_1 = jedynka.index("(")
             Znak_2 = jedynka.index(",")
             Pierwszy = str(jedynka[int(Znak_1)+1:int(Znak_2)])
             Znak_3 = jedynka.index(")")
             Drugi = str(jedynka[int(Znak_2)+2:int(Znak_3)])
             Jeden, Dwa = Pierwszy.split(":")
             Trzy, Cztery = Drugi.split(":")
               
             ##############################################################################################################################################
             ################################### "WYGRZEBANIE" GŁEBOKO UKRYTYCH ZMIENNYCH JSNOW I ZMIENNYCH URL ###########################################

             temp = Link
             url = Link
             headers = {
                 'User-Agent': 'curl/7.64.0',
                 'Referer': 'https://www.oddsportal.com/inplay-odds/live-now/basketball/',
                 }
     
             page = requests.get(url, headers=headers)
             soup = BeautifulSoup(page.text, 'html.parser')

             script = soup.select_one('script:contains("new OpHandler")').text

             json_text = re.search('PageEvent\((.*?)\);', script)
      
             if not json_text:
                 print('script not found')
                 sys.exit()

             try:
                 json_data = json.loads(json_text.group(1))
             except ValueError:
                 print('json not parsed')
                 sys.exit()

             id1 = json_data.get('id')
             id2 = urllib.parse.unquote(json_data.get('xhash'))

             Przedmeczowy1_url = 'https://fb.oddsportal.com/feed/match/1-3-{}-2-1-{}.dat?_={}'
             Przedmeczowy_Url =  Przedmeczowy1_url.format(id1, id2, int(time.time() * 1000))
             print(Przedmeczowy_Url)

             Live1_url = 'https://fb.oddsportal.com/feed/live/1-3-{}-2-1-{}.dat?_={}'
             Live_Url =  Live1_url.format(id1, id2, int(time.time() * 1000))
             print(Live_Url)

             
             UniwersalnyJSON1 = "globals.jsonpCallback\('/feed/match/1-3-{}-2-1-{}.dat'"
             Przedmeczowy_JSON = UniwersalnyJSON1.format(id1,id2)
             print(Przedmeczowy_JSON)

             UniwersalnyJSON1 = "globals.jsonpCallback\('/feed/live/1-3-{}-2-1-{}.dat'"
             Live_JSON = UniwersalnyJSON1.format(id1,id2)
             print(Live_JSON)

             ############################################################################################################################## 
             ################################ UZYSKIWANIE DANYCH PRZEDMECZOWYCH ###########################################################

             url = f"{Przedmeczowy_Url}"
             headers = {
                 'User-Agent': 'curl/7.64.0',
                 'Referer': 'https://www.oddsportal.com/inplay-odds/live-now/basketball/',
                 }
             page = requests.get(url, headers=headers)
             result = re.search(f"{Przedmeczowy_JSON}, (.*)\);", page.text)
             if not result:
                 sys.exit("Result not found")
             json_text = result.group(1)
             json_data = json.loads(json_text).get('d')
             json_data2 = json.loads(json_text)
             ############################################################################################################################
             #################################### WYDOBYCIE PRZEDMECZOWEJ LINII 1 WERSJA ###############################################
             
             if not json_data['oddsdata']['back']:
                 print("pusty przedmeczowy JSON")
                 continue
             else:
                 m = {k: sum(v['act'].values()) for k, v in json_data2['d']['oddsdata']['back'].items()}
                 gd = max(m, key=m.get)
                 print(gd[8:-2])
             srednia = float(gd[8:-2])
             print(srednia)
            
             #################################################################################################################################             
             ######################################## SELEKCJONOWANIE UZYSKANYCH DANYCH PRZEDMECZOWYCH ######################################
             
             punkty = soup1.find('span',{'class':'live-score'}).text
             PunktyGoscia, PunktyGospodarza = punkty.split(":")
             print(f"{PunktyGoscia} - {PunktyGospodarza}")

             Polowa = (int(PunktyGoscia) + int(PunktyGospodarza))*2
             print(Polowa)

             Procent = ((float(Polowa) - float(srednia))/float(srednia) )*100
             Sformatowany_Procent = f'{Procent:2.2f}'
             print(float(Sformatowany_Procent))
             logiczna = False

             ##################################################################################################################################
             ############################################## DANE LIVE  ########################################################################

             url = f"{Live_Url}"
             headers = {
                 'User-Agent': 'curl/7.64.0',
                 'Referer': 'https://www.oddsportal.com/inplay-odds/live-now/basketball/',
                 }
             page = requests.get(url, headers=headers)
             result = re.search(f"{Live_JSON}, (.*)\);", page.text)
             if not result:
                 sys.exit("Result not found")
             json_text = result.group(1)
             json_data = json.loads(json_text).get('d')
             json_data2 = json.loads(json_text)

             ############################################################################################################################
             #################################### WYDOBYCIE LIVE LINII 1 WERSJA ###############################################
             
             if not json_data['oddsdata']['back']:
                 print("pusty live JSON")
                 continue
             else:
                 m = {k: sum(v['act'].values()) for k, v in json_data2['d']['oddsdata']['back'].items()}
                 gd = max(m, key=m.get)
                 print(gd[8:-2])
             srednia_live = float(gd[8:-2])
             print(srednia_live)
             
             ################################################################################################################
             ################################# WYSYŁANIE E-MAILI ############################################################

             if Zakazana_Lista == []:
                 if (float(Sformatowany_Procent) >=29): 
                     server = smtplib.SMTP('smtp.gmail.com', 587)
                     server.ehlo()
                     server.starttls()
                     server.ehlo()

                     server.login('[email protected]','cegvrlziyznywhts')

                     sender = '[email protected]'
                     receivers = ['***************']  

                     message = MIMEText('Python', 'plain', 'utf-8')
                     message['***************'] =  Header(f"Przedmeczowe punkty: {srednia}\n\nPunkty Live:{srednia_live} \n Link do meczu {Sformatowany_Procent}% po pierwszej polowie to :{temp}")

                     subject = 'Bardzo uzyteczny robot'
                     message['Subject'] = Header(subject)

                     msg = f"{subject}\n\n{message}"

                     server.sendmail(
                         '[email protected]',
                         '***************',
                         msg.encode()
                         )
                     Zakazana_Lista.append(temp)
                 if (float(Sformatowany_Procent) <= -29):
                     server = smtplib.SMTP('smtp.gmail.com', 587)
                     server.ehlo()
                     server.starttls()
                     server.ehlo()

                     server.login('[email protected]','cegvrlziyznywhts')

                     sender = '[email protected]'
                     receivers = ['***************']  

                     message = MIMEText('Python', 'plain', 'utf-8')
                     message['***************'] =  Header(f"Przedmeczowe punkty: {srednia}\n\nPunkty Live:{srednia_live} \n Link do meczu {Sformatowany_Procent}% po pierwszej polowie to :{temp}")

                     subject = 'Bardzo uzyteczny robot'
                     message['Subject'] = Header(subject)

                     msg = f"{subject}\n\n{message}"

                     server.sendmail(
                         '[email protected]',
                         '***************',
                         msg.encode()
                         )
                     Zakazana_Lista.append(temp)
                 if (float(Sformatowany_Procent) <= -20 and (int(Jeden)<10 or int(Dwa)<10 or int(Trzy)<10 or int(Cztery)<10)):
                     server = smtplib.SMTP('smtp.gmail.com', 587)
                     server.ehlo()
                     server.starttls()
                     server.ehlo()

                     server.login('[email protected]','cegvrlziyznywhts')

                     sender = '[email protected]'
                     receivers = ['***************']  

                     message = MIMEText('Python', 'plain', 'utf-8')
                     message['***************'] = Header(f"Przedmeczowe punkty: {srednia}\n\n Punkty Live:{srednia_live} \n Link do meczu {Sformatowany_Procent}% + PONIZEJ 10 PKT po pierwszej polowie to :{temp}")

                     subject = 'Bardzo uzyteczny robot'
                     message['Subject'] = Header(subject)

                     msg = f"{subject}\n\n{message}"

                     server.sendmail(
                         '[email protected]',
                         '***************',
                         msg.encode()
                         )
                     Zakazana_Lista.append(temp)

             ############################################################################################################################
             ###################################### ZABEZPIECZENIE PRZED PONOWNYM WYSŁANIEM MECZU #######################################

             else:
                 for j in Zakazana_Lista :   
                     if (j == temp):
                         logiczna = True
                         break
                 if logiczna == False:
                     if (float(Sformatowany_Procent) >=29): 
                         server = smtplib.SMTP('smtp.gmail.com', 587)
                         server.ehlo()
                         server.starttls()
                         server.ehlo()

                         server.login('[email protected]','cegvrlziyznywhts')

                         sender = '[email protected]'
                         receivers = ['***************']  

                         message = MIMEText('Python', 'plain', 'utf-8')
                         message['***************'] =  Header(f"Przedmeczowe punkty: {srednia}\n\n Punkty Live:{srednia_live} \nLink do meczu {Sformatowany_Procent}% po pierwszej polowie to :{temp}")

                         subject = 'Bardzo uzyteczny robot'
                         message['Subject'] = Header(subject)

                         msg = f"{subject}\n\n{message}"

                         server.sendmail(
                             '[email protected]',
                             '***************',
                             msg.encode()
                             )
                         Zakazana_Lista.append(temp)
                         logiczna == True    
                     
                     if (float(Sformatowany_Procent) <= -20 and (int(Jeden)<10 or int(Dwa)<10 or int(Trzy)<10 or int(Cztery)<10)):
                         server = smtplib.SMTP('smtp.gmail.com', 587)
                         server.ehlo()
                         server.starttls()
                         server.ehlo()

                         server.login('[email protected]','cegvrlziyznywhts')

                         sender = '[email protected]'
                         receivers = ['***************']  

                         message = MIMEText('Python', 'plain', 'utf-8')
                         message['***************'] = Header(f"Przedmeczowe punkty: {srednia}\n\n Punkty Live:{srednia_live} \nLink do meczu {Sformatowany_Procent}% + PONIZEJ 10 PKT po pierwszej polowie to :{temp}")

                         subject = 'Bardzo uzyteczny robot'
                         message['Subject'] = Header(subject)

                         msg = f"{subject}\n\n{message}"

                         server.sendmail(
                             '[email protected]',
                             '***************',
                             msg.encode()
                             )
                         Zakazana_Lista.append(temp)
                         logiczna == True

                     if (float(Sformatowany_Procent) <= -29):
                         server = smtplib.SMTP('smtp.gmail.com', 587)
                         server.ehlo()
                         server.starttls()
                         server.ehlo()

                         server.login('[email protected]','cegvrlziyznywhts')

                         sender = '[email protected]'
                         receivers = ['***************']  

                         message = MIMEText('Python', 'plain', 'utf-8')
                         message['***************'] =  Header(f"Przedmeczowe punkty: {srednia}\n\n Punkty Live:{srednia_live} \nLink do meczu {Sformatowany_Procent}% po pierwszej polowie to :{temp}")
                         subject = 'Bardzo uzyteczny robot'
                         message['Subject'] = Header(subject)

                         msg = f"{subject}\n\n{message}"

                         server.sendmail(
                             '[email protected]',
                             '***************',
                             msg.encode()
                             )
                         Zakazana_Lista.append(temp)
                         logiczna == True
         print(czas.find('strong').text)
         
         if (czas.find('strong').text=="3rd Quarter 9\'"):
             temp = Link
             url = Link
             headers = {
                 'User-Agent': 'curl/7.64.0',
                 'Referer': 'https://www.oddsportal.com/inplay-odds/live-now/basketball/',
                 }
     
             page = requests.get(url, headers=headers)
             soup = BeautifulSoup(page.text, 'html.parser')
             script = soup.select_one('script:contains("new OpHandler")').text

             json_text = re.search('PageEvent\((.*?)\);', script)
      
             if not json_text:
                 print('script not found')
                 sys.exit()

             try:
                 json_data = json.loads(json_text.group(1))
             except ValueError:
                 print('json not parsed')
                 sys.exit()

             id1 = json_data.get('id')
             id2 = urllib.parse.unquote(json_data.get('xhash'))

             Przedmeczowy1_url = 'https://fb.oddsportal.com/feed/match/1-3-{}-2-1-{}.dat?_={}'
             Przedmeczowy_Url =  Przedmeczowy1_url.format(id1, id2, int(time.time() * 1000))
             print(Przedmeczowy_Url)

             UniwersalnyJSON1 = "globals.jsonpCallback\('/feed/match/1-3-{}-2-1-{}.dat'"
             Przedmeczowy_JSON = UniwersalnyJSON1.format(id1,id2)
             print(Przedmeczowy_JSON)

             ############################################################################################################################## 
             ################################ UZYSKIWANIE DANYCH PRZEDMECZOWYCH ###########################################################

             url = f"{Przedmeczowy_Url}"
             headers = {
                 'User-Agent': 'curl/7.64.0',
                 'Referer': 'https://www.oddsportal.com/inplay-odds/live-now/basketball/',
                 }
             page = requests.get(url, headers=headers)
             result = re.search(f"{Przedmeczowy_JSON}, (.*)\);", page.text)
             if not result:
                 sys.exit("Result not found")
             json_text = result.group(1)
             json_data = json.loads(json_text).get('d')
             json_data2 = json.loads(json_text)
             ############################################################################################################################
             #################################### WYDOBYCIE PRZEDMECZOWEJ LINII 1 WERSJA ###############################################
             
             if not json_data['oddsdata']['back']:
                 print("pusty przedmeczowy JSON")
                 continue
             else:
                 m = {k: sum(v['act'].values()) for k, v in json_data2['d']['oddsdata']['back'].items()}
                 gd = max(m, key=m.get)
                 print(gd[8:-2])
             srednia = float(gd[8:-2])
             print(srednia)
                 
             ########################################################### ROZDZIELENIE PUNKTOW W KWARTACH #######################################################
             ###################################################################################################################################################
             
             jedynka = czas.text
             Znak_1 = jedynka.index("(")
             Znak_2 = jedynka.index(",")
             Pierwszy = str(jedynka[int(Znak_1)+1:int(Znak_2)])
             Znak_3 = jedynka.index(",",30,37)
             Drugi = str(jedynka[int(Znak_2)+2:int(Znak_3)])
             Znak_4 = jedynka.index(")")
             Trzeci = str(jedynka[int(Znak_3)+2:int(Znak_4)])
                 
             Jeden, Dwa = Pierwszy.split(":")
             Trzy, Cztery = Drugi.split(":")
             Piec, Szesc = Trzeci.split(":")
                 
             ##################################################### OBLICZANIE PROCENTOW KWARTOWYCH ####################################################
             
             procent1 = ((float(srednia)-(float(Jeden)+float(Dwa))*4)/float(srednia))*-100
             Sformatowany_procent1 = f'{procent1:2.2f}'

             procent2 = ((float(srednia)-(float(Trzy)+float(Cztery))*4)/float(srednia))*-100
             Sformatowany_procent2 = f'{procent2:2.2f}'

             procent3 = ((float(srednia-4)-(float(Piec)+float(Szesc))*4)/float(srednia-4))*-100
             Sformatowany_procent3 = f'{procent3:2.2f}'

             Procent_Kwartowy1 = abs(float(Sformatowany_procent2)-float(Sformatowany_procent1))
             Procent_Kwartowy2 = abs(float(Sformatowany_procent3)-float(Sformatowany_procent2))
             print(Procent_Kwartowy1)
             print(Procent_Kwartowy2)
             if (Procent_Kwartowy2+Procent_Kwartowy1)>=100:
                 server = smtplib.SMTP('smtp.gmail.com', 587)
                 server.ehlo()
                 server.starttls()
                 server.ehlo()

                 server.login('[email protected]','cegvrlziyznywhts')

                 sender = '[email protected]'
                 receivers = ['*****************']  

                 message = MIMEText('Python', 'plain', 'utf-8')
                 message['***************'] =  Header(f"Przedmeczowe punkty: {srednia}\n1 Kwarta: {Sformatowany_procent1}%\n2 Kwarta: {Sformatowany_procent2}%\n3 Kwarta: {Sformatowany_procent3}%\nLink do meczu to: {temp}")

                 subject = 'Bardzo uzyteczny robot'
                 message['Subject'] = Header(subject)

                 msg = f"{subject}\n\n{message}"
                 server.sendmail(
                    '[email protected]',
                    '***************',
                     msg.encode()
                     )
 Randomowy_Czas = random.randint(38,73)
 time.sleep(Randomowy_Czas)

Dla urozmaicenia też czasem wyskakuje ten błąd : "ConnectionRefusedError: [WinError 10061] Nie można nawiązać połączenia, ponieważ komputer docelowy aktywnie go odmawia".
Stwierdziłem, że może troche przesadą było ciągłe pobieranie danych ze strony stad te time.sleep, zmieniłem też ustawienia w karcie sieciowej tak aby nie wyłączało mi wifi w laptopie żęby zaoszczędzić energie ale to nie pomogło, skrypt ciągle się urywa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1