Error con Selenium al extraer datos
Publicado por Mario (1 intervención) el 05/07/2022 16:04:46
Hola amigos! Estoy tratando de sacar los datos de Bwin con Selenium para mi bot de apuestas, pero por algún motivo lo que funciona para la liga española o la italiana no funciona para la premier, siendo en principio la misma estructura html en todos los casos. En algo estoy fallando, así que si alguien sabe donde esta el fallo se lo agradeceré mucho. El código contiene unas funciones que son IniciaDriver() y limpia_listas() que están en otro modulo, a continuación presento el código de ambas funciones y después el del resto del código. Para probar el código en las distintas ligas habría que cambiar la url en cada caso.
La siguiente funcion coge una lista de web elements y obtiene el texto
Por ultimo el codigo completo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def IniciaDriver():
from pruebamodulos1 import limpia_listas,uno_x_dos
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
import time
time.sleep(5)
# declaramos la ruta del chromedriver
ruta = ChromeDriverManager(path='./chromedriver').install()
# Personalizamos las opciones del webdriver
options = Options()
options.add_argument("--disable-blink-features=AutomationControlled")
user_agent = 'https://developers.whatismybrowser.com/useragents/parse/?analyse-my-user-agent=yes'
options.add_argument(f"user-agent={user_agent}")
options.add_argument("--disable-web-security")
options.add_argument("--disable-extensions")
options.add_argument("--ignore-certificat-errors")
options.add_argument("--no-sandbox")
options.add_argument("--no-first-run")
options.add_argument("--no-proxy-server")
# terminamos de liquidar los detalles y guardamos la web en la variable driver
s = Service(ruta)
driver = webdriver.Chrome(service=s, options=options)
return(driver)
La siguiente funcion coge una lista de web elements y obtiene el texto
1
2
3
4
5
6
7
8
9
def limpia_listas(lista):
lista_txt = []
for i in lista:
lista_txt.append(i.text)
lista_final = []
for i in lista_txt:
if i != '':
lista_final.append(i)
return(lista_final)
Por ultimo el codigo completo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def Liga():
import selenium
from pruebamodulos1 import IniciaDriver, limpia_listas, uno_x_dos, uno_dos
from selenium.webdriver.common.by import By
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver import ActionChains
driver = IniciaDriver()
driver.get('https://sports.bwin.es/es/sports/f%C3%BAtbol-4/apuestas/espa%C3%B1a-28')
containers = driver.execute_script('return document.querySelectorAll("ms-event.grid-event.ms-active-highlight");')
n = len(containers)
final = []
for i in range(0,n):
partidos = containers[i].find_elements(By.CSS_SELECTOR, "div.participant-container")
partidos = limpia_listas(partidos)
cuotas = containers[i].find_elements(By.TAG_NAME, "ms-font-resizer")
cuotas = limpia_listas(cuotas)
cuotas = cuotas[:3]
final.append(partidos)
final.append(cuotas)
print(final)
Valora esta pregunta


0