Si quieres buscar videos de Youtube de manera totalmente automática, Google ofrece su API de Youtube. Una alternativa a esta API es hacer uso de técnicas de Web Scraping para simular que nuestra aplicación es un humano navegando por la Web y recopilar información de forma automática.

buscar videos en Youtube con Python

Vamos a ver como se hace mediante la escritura de un sencillo código Python y el apoyo de la libreria pyquery que permite realizar consultas de manera similar a como lo hace jQuery en documentos XML y HTML.

Si despues te interesa descargar videos de youtube entonces te interesa esta entrada donde explico cómo hacerlo. En cambio, si lo que te interesa es descargar el thumbnail entonces te puede interesar esta otra entrada donde explico cómo bajar una imagen de la web con python.

Código:

# -*- coding: cp1252 -*-
from pyquery import PyQuery as Pq
from urllib import urlencode

def search_youtube_video(title, pages):
    for page in range(pages):
        params = urlencode({'search_query':'intitle:"%s", video, long' % title, 'page':page})
        jq = Pq(url="http://www.youtube.com/results?%s" % params,
                headers={"user-agent": "Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20140129 Firefox/24.0"})
        jq.make_links_absolute("http://www.youtube.com")
        for video in jq("ol.item-section").children().items():
            url = video.find("a.yt-uix-tile-link").attr("href")
            title = video.find("a.yt-uix-tile-link").text()
            time = video.find("span.video-time").text()   
            if time:
                tsecs = 0
                items = time.split(':')
                items.reverse()
                for i in range(len(items)):
                    tsecs += int(items[i])*(60**i)          
            description = video.find("div.yt-lockup-description").text()
            thumb = video.find("div.yt-thumb img").attr("data-thumb")
            if not thumb:
                thumb = video.find("div.yt-thumb img").attr("src")
            if thumb:
                thumb = thumb.lstrip("//")     
            published = video.find("ul.yt-lockup-meta-info li").eq(0).html()
            views = video.find("ul.yt-lockup-meta-info li").eq(1).html()

            print
            print "url:", url
            print "title:", title
            print "time:", time
            print "time in seconds:", tsecs
            print "description:", description
            print "thumbnail:", thumb
            print "published:", published
            print "views:", views

if __name__ == '__main__':
    search_youtube_video("la guerra del opio", 1)

La función search_youtube_video acepta dos parámetros. title es el texto a buscar y pages el número de páginas de resultados a procesar. El código hace uso de selectores jqyery para encontrar la información en la página de resultados.

El código siempre buscar videos de mas de 20 minutos, para eliminar esta restricción deberás eliminar el keyword «long» del parámetro search_query quedando así:

params = urlencode({'search_query':'intitle:"%s", video' % title, 'page':page})

Resultado ejemplo:

url: http://www.youtube.com/watch?v=436qM17mKok
title: la guerra del opio 1997 dvdripspanishwww zonatorrent com
time: 1:46:38
time in seconds: 6398
description: 
thumbnail: i.ytimg.com/vi/436qM17mKok/mqdefault.jpg
published: Hace 2 años
views: 23.792 visualizaciones

url: http://www.youtube.com/watch?v=0L7l7j9r1hs
title: Escenas para uso didáctico: La Guerra del Opio
time: 47:51
time in seconds: 2871
description: Escenas para explicar el imperialismo colonial. Más información:...
thumbnail: i.ytimg.com/vi/0L7l7j9r1hs/mqdefault.jpg
published: Hace 2 años
views: 5.833 visualizaciones

url: http://www.youtube.com/watch?v=bhnXgV-ZRS0
title: La Guerra del Opio
time: 32:18
time in seconds: 1938
description: mi proyecto Brenda Elena Segura Maza "A"
thumbnail: i.ytimg.com/vi/bhnXgV-ZRS0/mqdefault.jpg
published: Hace 1 año
views: 230 visualizaciones