2009-09-20 6 views

Répondre

7
from xml.etree import cElementTree as ET 
import urllib 

def get_bass_fishing_URLs(): 
    results = [] 
    data = urllib.urlopen(
     'http://gdata.youtube.com/feeds/api/videos/-/bass/fishing/') 
    tree = ET.parse(data) 
    ns = '{http://www.w3.org/2005/Atom}' 
    for entry in tree.findall(ns + 'entry'): 
    for link in entry.findall(ns + 'link'): 
     if link.get('rel') == 'alternate': 
     results.append(link.get('href')) 

comme semble que ce que vous obtenez sont les liens dits "alternatifs". Les nombreuses petites variations possibles si vous voulez quelque chose de légèrement différent, je l'espère, devraient être claires à partir du code ci-dessus (plus la bibliothèque standard Python docs pour ElementTree).

+0

sympa - j'ai oublié ElementTree. le vôtre est beaucoup plus propre que le mien :) –

+0

merci de m'avoir commencé avec ET; votre exemple pleinement fonctionnel a beaucoup aidé. piquadrat m'a donné exactement ce que j'ai demandé, mais il s'est avéré que j'avais besoin de l'information dans ainsi cette solution s'est avérée plus adaptable dans la nature. –

+0

@ sos-sky, de rien, toujours difficile de trouver le bon équilibre entre «donner un poisson» et «enseigner à pêcher», heureux d'apprendre que j'ai trouvé le bon équilibre cette fois-ci. –

1
import urllib 
from xml.dom import minidom 
xmldoc = minidom.parse(urllib.urlopen('http://gdata.youtube.com/feeds/api/videos/-/bass/fishing/')) 

links = xmldoc.getElementsByTagName('link') 
hrefs = [] 
for links in link: 
    if link.getAttribute('rel') == 'alternate': 
     hrefs.append(link.getAttribute('href')) 

hrefs 
+0

Merci de nous aider à me va, mais cela renvoie des liens étranges comme: http://m.youtube.com/watch?v=UIi-fANCngQ (il devrait être pour le lien dans les liens ci-dessus aussi) –

+0

mis à jour. Vous pouvez effectuer une analyse regex sur l'instruction if interne si vous voulez un certain pattern, ou faire des opérations dom sur quel type d'attributs l'élément link doit avoir. –

+0

n'est pas urllib déprécié? – jldupont

3

Jetez un oeil à Universal Feed Parser, qui est un analyseur de flux RSS et Atom open source pour Python.

+0

doh - nice find, hehe –

3

Dans ce cas simple, cela devrait être suffisant:

import re, urllib2 
request = urllib2.urlopen("http://gdata.youtube.com/feeds/api/videos/-/bass/fishing/") 
text = request.read() 
videos = re.findall("http:\/\/www\.youtube\.com\/watch\?v=[\w-]+", text) 

Si vous voulez faire des choses plus compliquées, l'analyse XML sera mieux adapté que les expressions régulières

+0

Nice, ça ne fait que retourner la liste que je recherche. –

Questions connexes