es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Hermosa sopa para extraer pares clave-valor de data-op-info.

El código a continuación no presenta errores pero no está completo. A partir de este punto, intento obtener solo todos los valores ‘fullgame’ en un dataframe.

import json
from bs4 import BeautifulSoup
import urllib.request

source = urllib.request.urlopen('https://www.oddsshark.com/nfl/odds').read()
soup = BeautifulSoup(source, 'html.parser')

results = soup.find_all(class_ = "op-item op-spread op-opening")

for result in (results):
    print(json.loads(result['data-op-info']).items())

Utilicé print al final ya que estaba tratando de extraer solo el valor de línea y verlo.

Tenga en cuenta que hay una pregunta similar en este sitio, pero la solución solo funciona para un div. Fallará si la variable tiene múltiples divs.
https://stackoverflow.com/questions/64897809/how-to-parse-information-between-on-web-page-using-beautifulsoup

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para obtener solamente los valores de “fullgame” en un dataframe, se puede hacer lo siguiente:

    1. Crear una lista vacía para almacenar los valores de “fullgame”.
    2. Iterar a través de cada “result” en “results” y extraer el valor de “fullgame” del diccionario “json” usando el método “get()”. Agregar el valor de “fullgame” a la lista creada en el paso 1.
    3. Crear un dataframe de pandas a partir de la lista de valores de “fullgame”.

    Aquí tienes el código actualizado:

    import json
    import pandas as pd
    from bs4 import BeautifulSoup
    import urllib.request
    
    source = urllib.request.urlopen('https://www.oddsshark.com/nfl/odds').read()
    soup = BeautifulSoup(source, 'html.parser')
    
    results = soup.find_all(class_="op-item op-spread op-opening")
    
    fullgame_values = []  # lista vacía para almacenar los valores de fullgame
    
    for result in results:
        data_op_info = json.loads(result['data-op-info'])
        fullgame_value = data_op_info.get('fullgame')  # obtener el valor de fullgame del diccionario json
        fullgame_values.append(fullgame_value)  # agregar a la lista
    
    df = pd.DataFrame({'fullgame_values': fullgame_values})
    print(df.head())
    

    Esto debería darte un dataframe de pandas con una columna (fullgame_values) que contiene todos los valores de “fullgame” de la página web.

Comments are closed.