我从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上
我认为,自从编写本教程以来,查询返回的样式发生了变化。如果打印
HTMLContent.read().decode()
,可以看到URL的格式为"url":"/watch?v=0755SXCTCN0"
我更改了您的代码,您还有一个不存在的
search_results[0]
相关问题 更多 >
编程相关推荐