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.
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:
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 31 32 33 34 35 36 37 38 39 40 41 | # -*- 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í:
1 | params = urlencode({'search_query':'intitle:"%s", video' % title, 'page':page}) |
Resultado ejemplo:
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 | 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 |