Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python请求模块的下载速度低得离谱 问题:_Python_Performance_Download_Python Requests_Progress Bar - Fatal编程技术网

Python请求模块的下载速度低得离谱 问题:

Python请求模块的下载速度低得离谱 问题:,python,performance,download,python-requests,progress-bar,Python,Performance,Download,Python Requests,Progress Bar,我一直在尝试使用Python的请求模块制作一个简单的动画下载程序。我正在使用progressbar2模块跟踪进度。在尝试下载时,我获得了0.x B/s的速度。我假设问题在于如何根据选择chunk\u大小。但无论块大小如何,我都得到了相同的可忽略不计的速度 规格和信息: 我使用的是Windows 10、Python 3.5、最新的请求模块(2.18.4),并且拥有速度为40Mbps的良好互联网 我可以通过浏览器(Chrome)从链接下载文件并免费下载 下载管理器约1分钟 该链接是完美的工作,我没有

我一直在尝试使用Python的请求模块制作一个简单的动画下载程序。我正在使用progressbar2模块跟踪进度。在尝试下载时,我获得了0.x B/s的速度。我假设问题在于如何根据选择
chunk\u大小。但无论块大小如何,我都得到了相同的可忽略不计的速度

规格和信息:
  • 我使用的是Windows 10、Python 3.5、最新的
    请求
    模块(2.18.4),并且拥有速度为40Mbps的良好互联网
  • 我可以通过浏览器(Chrome)从链接下载文件并免费下载 下载管理器约1分钟
  • 该链接是完美的工作,我没有防火墙冲突
  • 代码: 截图:

    预期解决方案: 不确定这是否已修复

  • 最好在requests模块中找到一个解决方案,但我愿意接受Python范围内的任何答案,这些答案可以让我获得很好的速度
  • 我希望下载是分块的,因为我希望通过progressbar查看进度。所以
    shutil.copyfileobj(r.raw)
    不是我想要的
  • 我确实尝试过使用多个线程,但这只会使事情变得复杂,没有任何帮助。我认为问题在于将块写入缓冲区本身,而在线程之间拆分此任务没有帮助 编辑: 根据建议,我尝试使用随机用户代理,如下所示:

    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'}
    
    并发送请求,请求头为
    r=requests.get(url,stream=True,headers=random_headers())

    然而,这没有什么区别(

    第2次编辑:
    使用来自“”的示例视频进行了尝试。同样的问题依然存在。:/

    您是否尝试过用您的用户代理和Google可能需要的其他标题填充您的请求标题,以避免将您标记为机器人并限制您的下载速度?

    因此,正如其他建议一样,Google正在限制速度。为了克服这一问题,我使用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)
    
    好吧,至少我能够通过谷歌浏览器的下载程序以尽可能快的速度完全自动化下载

    因此,如果有人能帮我解决这个问题,请在评论中回复,如果有帮助,我将投票:

  • 在Python中找到一种方法,像免费下载管理器那样为每个文件使用多个连接

  • 这是完整的链接。

    你确定不是谷歌在这里进行节流吗?实际上是远程端以较慢的速度提供数据。至于github问题,默认大小确实发生了变化。你设置了一个合适的块大小,这样就根本不适用了。可能吧。我会添加用户代理,然后像Matt men一样尝试分区。不确定是否相关,但我编写的蜘蛛能够成功获取相同的链接。因此,我认为在这种情况下,谷歌并没有真正阻止bot。UAs只是一个标题。谷歌很可能使用更复杂的启发式方法来确定某个东西是否是bot。你是否在本地Web服务器上尝试过相同的代码,比如说,使用你们知道这不是节流吗?若这太慢了,那个么也许我们可以责怪请求。否则,你们将需要对头做更多的实验。
    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)