代码之家  ›  专栏  ›  技术社区  ›  Skylar Saveland

通过简单的YouTube XML抓取视频的python列表

  •  1
  • Skylar Saveland  · 技术社区  · 15 年前

    我有一个XML提要,说:

    http://gdata.youtube.com/feeds/api/videos/-/bass/fishing/

    我想获取视频的href列表:

     ['http://www.youtube.com/watch?v=aJvVkBcbFFY', 'ht....', ... ]
    
    4 回复  |  直到 15 年前
        1
  •  7
  •   Alex Martelli    15 年前
    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'))
    

    似乎你得到的是所谓的“备用”链接。我希望,如果您想要一些稍微不同的东西,那么许多小的、可能的变体应该与上面的代码(加上标准的python库)完全不同 docs 对于elementtree)。

        2
  •  3
  •   Timothy S. Van Haren Prashant    15 年前

    看一看 Universal Feed Parser 这是一个开源的RSS和Atom Feed解析器。

        3
  •  3
  •   Benjamin Wohlwend    15 年前

    在这种简单的情况下,这就足够了:

    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)
    

    如果您想做更复杂的事情,解析XML将比正则表达式更适合。

        4
  •  1
  •   meder omuraliev    15 年前
    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