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

2024-09-27 22:37:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我从this website开始学习本教程 为了了解如何根据给定的查询从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上


Tags: 函数importrecomyoutube链接requestwww
1条回答
网友
1楼 · 发布于 2024-09-27 22:37:40

我认为,自从编写本教程以来,查询返回的样式发生了变化。如果打印HTMLContent.read().decode(),可以看到URL的格式为"url":"/watch?v=0755SXCTCN0"

我更改了您的代码,您还有一个不存在的search_results[0]

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'/watch\?v=(.{11})', HTMLContent.read().decode())
         print(SearchResults)
         BestLink = "http://www.youtube.com/embed/" + SearchResults[0]
         return BestLink

相关问题 更多 >

    热门问题