查看预览时是否可以加载原始大小的预览图像 (BeautifulSoup Python)

Is it possible for me to load a preview image at its original size when viewing a preview (BeautifulSoup Python)

以新人警告之类的方式作为开头。我目前正在尝试从 youtube 上抓取图片以用于个人挑战项目,特别是某些频道的社区选项卡中的图片。我想制作一个脚本,能够下载社区选项卡中使用的每个图像。到目前为止,我遇到了一些小问题,但此时我已经有了一些功能代码,可以从屏幕上下载第一批图像(我知道我可以从 selenium 实现滚动功能,但我还没有专注于此)。

我已经设法为页面上的图像抓取了所有 url,但结果是它们都是 600x600 像素,而不是原始图像。我不确定这些的确切术语是什么,但我只是将它们称为预览图像。不幸的是,我在 bs4 中没有看到任何简单的选项来查找原始图像,但我有几个想法,我非常确定如何实现。

第一个想法是,如果我单击页面上的图像,它会将我加载到另一个带有原始图像的 url,然后我获取 url 并毫无问题地下载它。唯一的问题是我似乎无法找到一种方法让我的代码打开页面以从中下载原件,因为我在 html 中找不到它的 link。然而,这是我尝试浏览 html 的第二天,所以我很可能会在这里遗漏一些简单的东西。如果可以的话,我想在我当前的代码中实现会很容易,因为我只需要遍历每个图像。

其次,我的浏览器有一个名为“Hoverzoom”的插件,当我将光标悬停在预览上时,它会显示原始图像。这有点不对劲,但我认为如果这个插件可以做到的话,有某种方法可以直接从预览中找到原始图像,但我对任何可以这样做的库或代码都一无所知。

在下面附上我的代码,非常感谢任何帮助!我知道我的一些代码有点奇怪,但我找不到更简单的方法来下载图像,因为有时获取的 url 会缺少“https:”,我不确定如何以优雅的方式修复它。如果您对我如何解决这个问题有任何想法,我会很高兴的!再次感谢!

import os
from bs4 import BeautifulSoup
from selenium import webdriver
import urllib.request as req

site = 'https://www.youtube.com/c/tolariancommunity/community'
directory = os.path.dirname(os.path.realpath(__file__)) + '/pictures/'
if not os.path.exists(directory):
    os.makedirs(directory)
driver = webdriver.Chrome('./chromedriver.exe')
driver.get(site)
soup = BeautifulSoup(driver.page_source, 'html.parser')
img_tags = soup.find_all('img',{"src":True})
urls = [img['src'] for img in img_tags]
defective_urls = []
res = []
for i in urls:
    if i not in res:
        res.append(i)
urls = res
for i in urls:
    if i.startswith("https://"):
        pass
    else:
        defective_urls = defective_urls + [i]
        urls.remove(i)
defective_urls[:] = [s.replace('//', 'https://') for s in defective_urls]
urls = urls + defective_urls
count = 1
for i in urls:
    req.urlretrieve(i, "%s.png" % count)
    count = count + 1

以此图为例:

https://yt3.ggpht.com/hyDJwLOZcpo5QJQCCrg8FxCZvV7LsMK1G43SibcPzP8eqshsSkSCB5s44CtKXZJrZhh8zFGOSaMD=s679-c-fcrop64=1,421a0000bfb2ffff-nd

它打开一个679 x679

您似乎可以使用 URL 中 = 之后的内容来控制大小。

s679-c-fcrop64=1,421a0000bfb2ffff-nd

您可以将其简化为:s679 并且您会得到相同的图像。

如果您将 679 更改为 2000,例如

https://yt3.ggpht.com/hyDJwLOZcpo5QJQCCrg8FxCZvV7LsMK1G43SibcPzP8eqshsSkSCB5s44CtKXZJrZhh8zFGOSaMD=s2000

您得到相同的图像,但大小为 1384 x 679 像素。

因此看起来使用了这个 s 值并且它 returns 最接近大小的匹配项。