Python:从视频中获取 youtube 作者图片 link

Python: getting the youtube author image from the video link

你好,所以我尝试使用 urllib3 模块从给定视频 link 中删除作者图像 url,但由于 [=25= 的长度不同] 它会导致加入其他属性,如宽度和高度

https://yt3.ggpht.com/ytc/AKedOLS-Bwwebj7zfYDDo43sYPxD8LN7q4Lq4EvqfyoDbw=s400-c-k-c0x00ffffff-no-rj","width":400,"height"

而不是我想要的作者图片 link :

https://yt3.ggpht.com/ytc/AKedOLS-Bwwebj7zfYDDo43sYPxD8LN7q4Lq4EvqfyoDbw=s400-c-k-c0x00ffffff-no-rj

我编写的代码

import re
import urllib.request

def get_author(uri):
    html = urllib.request.urlopen(uri)
    author_image = re.findall(r'yt3.ggpht.com/(\S{99})', html.read().decode())
    return f"https://yt3.ggpht.com/{author_image[1]}"

抱歉我的英语不好,提前致谢=)

如果您不确定匹配的长度,请不要硬编码要匹配的字符数。 {99} 不适用于任意字符串。

此外,您想要匹配 mark-up 文本中的字符串,您需要确保只匹配到定界字符。如果它是一个 " 字符,则匹配直到该字符。

此外,正则表达式中的点是特殊的,您需要将它们转义以匹配文字点。

此外,findall用于匹配所有匹配项,您可以使用re.search获取第一个以释放一些资源。

所以,修复可能看起来像

def get_author(uri):
    html = urllib.request.urlopen(uri)
    author_image = re.search(r'yt3\.ggpht\.com/[^"]+', html.read().decode())
    if author_image:
        return f"https://{author_image.group()}"
    return None # you will need to handle this condition in your later code

这里,author_image是正则表达式匹配数据对象,如果匹配,需要在匹配值(author_image.group())前加上https://和return值,否则,您需要 return 一些默认值以便稍后在代码中检查(此处,None)。