gpt4 book ai didi

python - Python 请求模块的下载速度低得离谱

转载 作者:行者123 更新时间:2023-12-05 06:37:37 25 4
gpt4 key购买 nike

问题:

我一直在尝试使用 Python 的请求模块制作一个简单的动漫下载器。我正在使用 progressbar2 模块跟踪进度。尝试下载时,我的速度为 0.x B/s。我假设问题是关于选择 chunk_size基于 this question .但是无论 block 大小如何,我得到的速度都可以忽略不计。

规范和信息:

  1. 我正在使用最新的 Windows 10、Python 3.5 requests模块 (2.18.4) 并拥有速度为 40Mbps 的不错的互联网。
  2. 我可以通过浏览器 (Chrome) 从链接下载文件并且免费大约 1 分钟即可下载管理器
  3. 链接工作正常,我没有防火墙冲突。

代码:

import os
import requests
import progressbar
from progressbar import *

os.chdir('D:\\anime\\ongoing')

widgets = ['Downloading: ', Percentage(), ' ', Bar(marker='#',left='[',right=']'),
' ', ETA(), FileTransferSpeed()]

url = 'https://lh3.googleusercontent.com/AtkUe87GbrINzTJS_Fj4W08CGqlOg9anwEF7n5-eKXcyS1RsaB8LdzRVaXloiJwiaX2IX1xqUiA=m22?title=(720P%20-%20mp4)Net-juu%20no%20Susume%20Episode%207'
r = requests.get(url,stream=True)
remotesize = r.headers['content-length']

print("Downloading {}.mp4!\n\n".format(url.split('title=')[1]))
pbar = ProgressBar(max_value=int(remotesize),widgets=widgets).start()
i = 0
with open('./tempy/tempy_file.mp4', 'wb') as f:
for chunk in r.iter_content(chunk_size=5*1024*1024):
if chunk:
i = i + len(chunk)
f.write(chunk)
pbar.update(int(i/int(remotesize) * 100))
pbar.finish()
print("Successfully downloaded!\n\n")

截图:

The speed is just ridiculous.

预期解决方案:

不确定这 Github Issue已修复。

  1. 最好在 requests 模块中找到解决方案,但我对 Python 范围内的任何答案持开放态度,这可以让我获得良好的速度。
  2. 我希望分块下载,因为我想通过进度条查看进度。所以shutil.copyfileobj(r.raw)这不是我要找的。
  3. 我确实尝试过使用多线程,但它只会让事情变得复杂而且没有帮助。我认为问题在于将 block 写入缓冲区本身并在线程之间拆分此任务无济于事。

编辑:

根据建议,我通过包含随机用户代理来尝试它,如图所示:

desktop_agents = ['Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14',
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0']

def random_headers():
return {'User-Agent': choice(desktop_agents),'Accept':'text/html,video/mp4,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'}

并发送 header 为 r = requests.get(url,stream=True,headers=random_headers()) 的请求

然而,这并没有什么不同。 :(

编辑编号2:

尝试使用来自“http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_5mb.mp4”的示例视频。同样的问题仍然存在。 :/

最佳答案

所以就像其他人建议的那样,谷歌正在限制速度。为了克服这个问题,我使用了 Selenium webdriver 下载链接:

from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
prefs = {'download.default_directory' : dir_name}
chrome_options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get(li)

好吧,至少我能够以 google chrome 下载器可能的速度完全自动下载。

所以如果有人能帮我解决这个问题,请在评论中回复,如果有帮助我会点赞:

  1. 想出一种在 Python 中为每个文件使用多个连接的方法,就像 Free Download Manager 使用的方法一样。

这是完整 script 的链接.

关于python - Python 请求模块的下载速度低得离谱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47378635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com