1

我有一个 xml 提要,说:

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

我想获取视频的 href 列表:

 ['http://www.youtube.com/watch?v=aJvVkBcbFFY', 'ht....', ... ]
4

4 回答 4

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'))

因为看起来你得到的是所谓的“替代”链接。我希望,如果你想要一些稍微不同的东西,许多小的可能变化应该从上面的代码中清楚(加上 ElementTree 的标准 Python 库文档)。

于 2009-09-20T22:44:03.053 回答
3

查看Universal Feed Parser,它是 Python 的开源 RSS 和 Atom 提要解析器。

于 2009-09-20T22:19:28.500 回答
3

在这样一个简单的情况下,这应该足够了:

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 将比正则表达式更适合

于 2009-09-20T22:20:52.467 回答
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
于 2009-09-20T22:19:08.633 回答