【问题标题】:How can I download many small files quickly? (Not Bandwidth limited)如何快速下载大量小文件? (不受带宽限制)
【发布时间】:2021-10-16 13:09:38
【问题描述】:

我需要在 python 中下载 ~50 个 CSV 文件。根据 Google Chrome 网络统计数据,下载仅需 0.1 秒,而处理请求大约需要 7 秒。

我目前正在使用无头 Chrome 来发出请求。 我尝试了多线程,但据我所知,浏览器不支持(在第一个请求完成处理之前它不能发出另一个请求)。我不认为多处理是一个选项,因为此脚本将托管在虚拟服务器上。

我的下一个想法是使用请求模块而不是无头 Chrome,但是在没有浏览器的情况下连接到公司网络时遇到问题。不过,这行得通吗?还有其他解决方案吗?我可以在单个驱动程序上使用多个驱动程序实例或多个选项卡吗?谢谢!

这是我的代码:

from Multiprocessing.pool import ThreadPool
driver=ChromeDriver()
Login(driver)

def getFile(item):
    driver.get(url.format(item))

updateSet=blah
pool= ThreadPool(len(updateSet))
for item in updateSet:
    pool.apply_async(getFile,(item,))

pool.close()
pool.join()

【问题讨论】:

    标签: python multithreading selenium-webdriver python-requests download


    【解决方案1】:

    对于请求,可以尝试将user agent string 设置为 Chrome 等浏览器,例如:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36。

    一些示例代码:

    import requests
    
    url = 'SOME URL'
    
    headers = {
        'User-Agent': 'user agent here',
        'From': 'youremail@domain.com'  # This is another valid field
    }
    
    response = requests.get(url, headers=headers)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 1970-01-01
      • 2016-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      相关资源
      最近更新 更多