【问题标题】:Simple scraping of youtube xml to get a Python list of videos简单抓取 youtube xml 以获取 Python 视频列表
【发布时间】:2009-09-20 22:02:27
【问题描述】:

我有一个 xml 提要,比如:

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

我想获取视频的 href 列表:

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

【问题讨论】:

  • 看看 BeautifulSoup。使用起来真的很愉快。

标签: python xml youtube


【解决方案1】:
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 库 docs)。

【讨论】:

  • 很好 - 我忘记了 ElementTree。你的比我的干净得多:)
  • 感谢您让我开始使用 ET;您的完整工作示例有很大帮助。 piquadrat 完全按照我的要求给了我,但后来发现我也需要 中的信息,所以这个解决方案证明在野外更具适应性。
  • @sos-sky,不客气——总是很难在“给鱼”和“教鱼”之间取得正确的平衡,很高兴听到我已经取得了正确的平衡这次;-)。
【解决方案2】:

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

【讨论】:

    【解决方案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 会比正则表达式更适合

    【讨论】:

    • 很好,确实返回了我正在寻找的列表。
    【解决方案4】:
    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
    

    【讨论】:

    • 感谢您帮助我前进,但这会返回奇怪的链接,例如:m.youtube.com/watch?v=UIi-fANCngQ(它也应该是上面链接中的链接)
    • 已更新。如果你想要某种模式,你可以对内部 if 语句进行正则表达式解析,或者对链接元素应该具有的属性类型进行 dom 操作。
    • 我也对它的状态感到困惑。高级 Python 2.x 用户更常使用 urllib2,但 urllib 是 Python 3 中的模块...
    猜你喜欢
    • 2012-12-06
    • 2019-04-04
    • 2019-09-14
    • 2012-10-24
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    相关资源
    最近更新 更多