我有一个 xml 提要,说:
http://gdata.youtube.com/feeds/api/videos/-/bass/fishing/
我想获取视频的 href 列表:
['http://www.youtube.com/watch?v=aJvVkBcbFFY', 'ht....', ... ]
我有一个 xml 提要,说:
http://gdata.youtube.com/feeds/api/videos/-/bass/fishing/
我想获取视频的 href 列表:
['http://www.youtube.com/watch?v=aJvVkBcbFFY', 'ht....', ... ]
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 库文档)。
查看Universal Feed Parser,它是 Python 的开源 RSS 和 Atom 提要解析器。
在这样一个简单的情况下,这应该足够了:
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 将比正则表达式更适合
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