解析所有可能的YouTube网址

时间:2012-01-11 04:38:57

标签: python

我正在寻找YouTube网址可以拥有的所有功能?

http://www.youtube.com/watch?v=6FWUjJF1ai0&feature=related

到目前为止,我见过feature = relmfu,related,fvst,fvwrel。这个地方有没有这个清单。此外,我的最终目标是从所有可能的youtube网址中提取视频ID(6FWUjJF1ai)。我怎样才能做到这一点?这似乎很难。是否有人已经这样做了?

4 个答案:

答案 0 :(得分:6)

您可以使用urlparse从您的网址获取查询字符串,然后您可以使用parse_qs从查询字符串中获取视频ID。

答案 1 :(得分:3)

为你的协助编写了代码....解决方案的功劳纯粹是弗兰克的。

import urlparse as ups
m = ups.urlparse('http://www.youtube.com/watch?v=6FWUjJF1ai0&feature=related')
print ups.parse_qs(m.query)['v']

答案 2 :(得分:0)

从以下答案https://stackoverflow.com/a/43490746/8534966开始,我运行了55个不同的测试用例,并且能够获得51个匹配。请参阅my tests

所以我写了一些if else代码来修复它:

# Get YouTube video ID
if "watch%3Fv%3D" in youtube_url:
    # e.g.: https://www.youtube.com/attribution_link?a=8g8kPrPIi-ecwIsS&u=/watch%3Fv%3DyZv2daTWRZU%26feature%3Dem-uploademail
    search_pattern = re.search("watch%3Fv%3D(.*?)%", youtube_url)
    if search_pattern:
        youtube_id = search_pattern.group(1)
elif "watch?v%3D" in youtube_url:
    # e.g.: http://www.youtube.com/attribution_link?a=JdfC0C9V6ZI&u=%2Fwatch%3Fv%3DEhxJLojIE_o%26feature%3Dshare
    search_pattern = re.search("v%3D(.*?)&format", youtube_url)
    if search_pattern:
        youtube_id = search_pattern.group(1)
elif "/e/" in youtube_url:
    # e.g.: http://www.youtube.com/e/dQw4w9WgXcQ
    youtube_url += " "
    search_pattern = re.search("/e/(.*?) ", youtube_url)
    if search_pattern:
        youtube_id = search_pattern.group(1)
else:
    # All else.
    search_pattern = re.search("(?:[?&]vi?=|\/embed\/|\/\d\d?\/|\/vi?\/|https?:\/\/(?:www\.)?youtu\.be\/)([^&\n?#]+)",
                               youtube_url)
    if search_pattern:
        youtube_id = search_pattern.group(1)

答案 3 :(得分:0)

您可能更愿意考虑更广泛的网址解析器as suggested on this Gist

它将解析 urlparse 可以做的事情。