获取从s托管的特定图像文件大小

2024-10-03 00:17:17 发布

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

目前正在一个网站上编写python自动化脚本。云中有50到100个图像,所有图像的结构如下:

<img style="width:80px;height:60px;"
     src="http://someimagehostingsite.net/somefolder/some_random_url_with_timestamp">

url没有任何像.jpg.png这样的后缀来直接获取信息。 但是我可以通过一个接一个地下载图片并获得图片文件的大小来实现。但我需要自动化这个过程,只需访问每个url并获得文件大小。有可能吗?你知道吗


Tags: 图像src脚本httpurlimgnet网站
2条回答

如果您只是想通过URL获取文件的内容长度,可以通过只下载HTTP头并检查Content-Length字段来实现:

import requests
url='https://commons.wikimedia.org/wiki/File:Leptocorisa_chinensis_(20566589316).jpg'

http_response = requests.get(url)

print(f"Size of image {url} = {http_response.headers['Content-Length']} bytes")

但是,如果图像在发送之前由服务器压缩,^{}字段将包含压缩文件大小(实际下载的数据量),而不是未压缩的图像大小。你知道吗

要对给定页面上的所有图像执行此操作,可以使用BeautifulSoup HTML processing library提取页面上所有图像的URL列表,并检查文件大小,如下所示:

from time import sleep
import requests
from bs4 import BeautifulSoup as Soup

url='https://en.wikipedia.org/wiki/Agent_Orange'

html = Soup(requests.get(url).text)

image_links = [(url + a['href']) for a in html.find_all('a', {'class': 'image'})]

for img_url in image_links:
    response = requests.get(img_url)
    try:
        print(f"Size of image {img_url} = {response.headers['Content-Length']} bytes")
    except KeyError:
        print(f"Server didn't specify content length in headers for {img_url}")
    sleep(0.5)

您必须根据您的特定问题来调整它,并且可能必须将其他参数传递给^{},以便将它缩小到您感兴趣的特定图像,但是类似的操作将实现您所要做的。你知道吗

您可以尝试查看是否可以从浏览器中为每个图像发送HEAD请求。HTTP HEAD Request in Javascript/Ajax? 这取决于HTTP服务器是否正确支持它。我也不知道你如何得到的内容长度头,但这听起来像你想要的。你知道吗

相关问题 更多 >