【问题标题】:How can you reduce/limit bandwidth during scraping of large images?在抓取大图像期间如何减少/限制带宽?
【发布时间】:2019-05-29 08:37:39
【问题描述】:

我要下载大约 1000 万张图片,在下载前 1000 张图片的小实验后,我注意到每张图片需要大约 4.5 秒(使用multiprocessing.Pools 可能会稍微加快),但最大的问题是平均图像大小约为 2400x2400,约为 2.2MB。我可以在下载后立即调整它们的大小,但主要瓶颈(目前)是互联网带宽。有没有办法以较低的分辨率直接下载图像?

示例虚拟代码:

import requests

resp = requests.get("some_url.jpg")
with open(fn, 'wb') as f:
    f.write(resp.content)

【问题讨论】:

    标签: python web-scraping python-requests


    【解决方案1】:

    减少

    除非有其他分辨率较低的文件可用 → 没有。除非服务器上有某种 API 或基本上任何东西,您想从中下载文件(图像),在将内容作为响应发回之前修改它在服务器上

    您可以尝试检查网站是否支持gzip 或其他压缩,并确保您首先下载压缩的响应,例如使用this answer,然后在保存文件之前解压缩,例如gzipzlib

    为了强制执行,请尝试使用特定的headers,例如Accept-Encoding

    限制

    为数据制作一个简单的计数器(您可以在处理时计算字节数或after you download),如果您不想达到例如每 5 分钟超过 100MB 或其他东西,然后为每个下载的 100MB 块输入time.sleep()

    小笔记

    Thread 不会帮助您并行化工作,请使用 multiprocessing.Pool 或喜欢真的将工作拆分为多个进程,以便您从(随机数)例如每个进程每 1 分钟 100 个文件到 400 个文件下载,4 个进程同时下载 100 个文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      相关资源
      最近更新 更多