从 youtube (Python) 获取链接时尝试查找第一个链接时输出的大部分时间为空列表

我遵循了本网站上的本教程, 以了解如何根据给定的查询从 youtube 中提取第一个链接。我已将代码实现为如下函数:


import urllib.request

import re

def GetBestYoutubeLink(MusicRequest):

         MusicSearchLink = MusicRequest.replace(" ","+")

         MusicSearchLink = "https://www.youtube.com/results?search_query=" + MusicSearchLink

         HTMLContent = urllib.request.urlopen(MusicSearchLink)

         SearchResults = re.findall(r'href=\"\/watch\?v=(.{11})', HTMLContent.read().decode())

         print(SearchResults)

         BestLink = "http://www.youtube.com/embed/" + SearchResults[0]

         return BestLink

查询将传递到函数的位置,它将打印第一个/最佳 url。然而,我从这个解决方案中面临的问题是大多数时候 SearchResults 数组在打印时是空的,因此我无法获得第一个 url。这不像查询是一个不常见的查询,因为我曾尝试过流行歌曲和视频来获取其链接,但它只是返回为空,但它有时会与最佳链接的正确输出一起工作。为了找到解决方案,我在打印 SearchResults 数组和定义 BestLink 变量之间给出了以下语句:


    if SearchResults == []:

        print(SearchResults)

        MusicPlayer(MusicRequest)

如果 SearchResults 数组为空,则它会再次运行该函数。然而,它正在重新运行,有时会打印一个空列表 20 到 30 次,这根本没有效率。我想了解我的列表背后的问题可能是什么,大多数时候返回为空,但有时会填充,因此能够获得链接,我该如何解决这个问题?


我当前的 python 版本是 3.6,我在 macOS Catalina 上运行。


冉冉说
浏览 127回答 1
1回答

慕田峪7331174

我认为自本教程编写以来,查询返回的样式发生了变化。如果您打印,HTMLContent.read().decode()您可以看到 URL 的格式"url":"/watch?v=0755SXCTCN0"我改变了你的代码,你也有一个search_results[0]不存在的。import urllib.requestimport redef GetBestYoutubeLink(MusicRequest):         MusicSearchLink = MusicRequest.replace(" ","+")         MusicSearchLink = "https://www.youtube.com/results?search_query=" + MusicSearchLink         HTMLContent = urllib.request.urlopen(MusicSearchLink)         SearchResults = re.findall(r'/watch\?v=(.{11})', HTMLContent.read().decode())         print(SearchResults)         BestLink = "http://www.youtube.com/embed/" + SearchResults[0]         return BestLink
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python