我正在尝试通过创建随机 ID 来查找随机视频。根据我的逻辑,我为链接创建随机视频 ID 并检查其 html。如果视频存在,则有多个视频 id,例如 15 或 20。如果不是有效的 url,则 html 中只有 5 或 6 个视频 id。
import urllib.request
import re
import random
import string
def random_url():
#There is random 11 digit after v=
url_base = "https://www.youtube.com/watch?v="
for _ in range(11):
url_base += (random.choice(string.ascii_letters + string.digits))
#valid videos has at least 10 video id on the html.
#Thats how code i check it is valid video or not
html = urllib.request.urlopen(url_base)
video_ids = re.findall(r"watch\?v=(\S{11})", html.read().decode())
if len(video_ids) < 10:
print(url_base)
return random_url()
else:
print(video_ids)
print(url_base)
print("done")
random_url()
当我测试时,检测工作正常,但在递归限制出现之前我找不到任何视频。我该怎么办?
正如 Eduardo 的评论中提到的,在达到递归限制之前,您不太可能找到视频。
因此,递归在这里不是正确的方法。
解决此问题的一个简单方法是用循环替换递归。 让
random_url
返回一些内容(例如,表示是否找到视频的布尔值),然后您可以循环直到找到这样的视频:
while not random_url():
pass
当然,这仍然不是一个有效的解决方案,但至少不会遇到递归的限制。