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.

Cómo recuperar la fecha en que se ha publicado un video en YouTube utilizando Python y Selenium.

Hice un script en Python y Selenium que realiza una búsqueda en YouTube. Cuando está completamente cargado, solo puedo extraer todos los títulos de los resultados. ¿Hay alguna línea de código que pueda integrar para obtener también la fecha de publicación?

Este es mi código:

def youTube():
    term = 'bitcoin'
    tit = []

    d = webdriver.Firefox()
    d.get('https://www.youtube.com/results?search_query='+term+'&sp=CAISAhAB')
    sleep(3)

    d.find_element_by_xpath("//*[contains(text(), 'Accetto')]").click()
    sleep(2)

    scrollHeight = d.execute_script("return window.scrollMaxY")
    print(scrollHeight)
    scrolled_pages = 0
    # mientras no hayamos alcanzado el scrollHeight máximo
    while d.execute_script("return window.pageYOffset") < 3000:
        d.execute_script("window.scrollByPages(1)")
        scrolled_pages += 1
        sleep(0.2)
    for my_elem in WebDriverWait(d, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//yt-formatted-string[@class='style-scope ytd-video-renderer' and @aria-label]"))):
        tit.append(my_elem.text)
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener la fecha de publicación junto con los títulos, puedes modificar el XPATH utilizado para obtener los títulos para incluir también la fecha de publicación. Puedes intentar usar el siguiente XPATH:

    "//div[@id='contents']//ytd-video-renderer[@class='style-scope ytd-item-section-renderer']//div[@id='metadata']//span[contains(@class, 'style-scope ytd-video-meta-block')][1]"
    

    Esto obtendrá el primer elemento dentro del div #metadata, que contiene la fecha de publicación del video. Luego puedes agregar este valor a tu lista tit junto con el título. Aquí tienes una versión actualizada:

    def youTube():
        term = 'bitcoin'
        tit = []
        date = []
    
        d = webdriver.Firefox()
        d.get('https://www.youtube.com/results?search_query='+term+'&sp=CAISAhAB')
        sleep(3)
    
        d.find_element_by_xpath("//*[contains(text(), 'Accetto')]").click()
        sleep(2)
    
        scrollHeight = d.execute_script("return window.scrollMaxY")
        print(scrollHeight)
        scrolled_pages = 0
        # mientras no hayamos alcanzado el max scrollHeight
        while d.execute_script("return window.pageYOffset") < 3000:
            d.execute_script("window.scrollByPages(1)")
            scrolled_pages += 1
            sleep(0.2)
        for video_elem in WebDriverWait(d, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@id='contents']//ytd-video-renderer[@class='style-scope ytd-item-section-renderer']"))):
            title_elem = video_elem.find_element_by_xpath(".//a[@id='video-title']")
            tit.append(title_elem.text)
            date_elem = video_elem.find_element_by_xpath(".//div[@id='metadata']//span[contains(@class, 'style-scope ytd-video-meta-block')][1]")
            date.append(date_elem.text)
    

    En esta versión, hemos agregado una lista date para almacenar las fechas de publicación. Luego creamos una variable video_elem para representar cada elemento de video, y usamos esto para encontrar el elemento del título y el elemento de la fecha de publicación utilizando XPATH. Añadimos el texto de cada elemento a sus respectivas listas, tit y date.

    Esto debería obtener tanto el título como la fecha de publicación de cada video.

Comments are closed.