Python requests下载超大文件/批量下载文件

(一)下载超大文件:

使用 python 下载超大文件,直接全部下载,文件过大,可能会造成内存不足,这时候要使用 requests 的 stream 模式

主要代码如下

iter_content:一块一块的遍历要下载的内容

iter_lines:一行一行的遍历要下载的内容

def download_file(url, file_pname, chunk_size=1024*4):
    """
    url: file url
    file_pname: file save path
    chunk_size: chunk size
    """# 第一种
    response_data_file = requests.get(url, stream=True)
    with open(file_pname, 'wb') as f:
        for chunk in response_data_file.iter_content(chunk_size=chunk_size):
            if chunk:
                f.write(chunk)
    
    # 第二种with requests.get(url, stream=True) as req:
        with open(file_pname, 'wb') as f:
            for chunk in req.iter_content(chunk_size=chunk_size):
                if chunk:
                    f.write(chunk)

# 下载大文件 应用实例:
def Big_Download(session,url_inquire,headers,form_data):
    response = session.post(url=url_inquire,data=form_data,headers=headers,verify=False,stream=True)
    # 获取文件大小
    file_size = int(response.headers['content-length'])
    with tqdm(total=file_size, unit='B', unit_scale=True, unit_divisor=1024, ascii=True, desc='Expense.json') as bar:
        with session.post(url=url_inquire,data=form_data,headers=headers,verify=False,stream=True) as r:
            with open('Expense.json', 'wb') as fp:
                for chunk in r.iter_content(chunk_size=512):
                    if chunk:
                        fp.write(chunk)
                        bar.update(len(chunk))

(二)批量下载文件:

#批量文件下载
import requests
from bs4 import BeautifulSoup

archive_url = "http://www-personal.umich.edu/~csev/books/py4inf/media/"
def get_links():
    r = requests.get(archive_url)
    soup = BeautifulSoup(r.content, 'html5lib')
    links = soup.findAll('a')
    video_links = [archive_url + link['href'] for link in links if link['href'].endswith('mp4')]

    return video_links

def download_series(video_links):
    for link in video_links:
        file_name = link.split('/')[-1]
        print("Downloading file:%s" % file_name)
        r = requests.get(link, stream=True)
        # download started
        with open(file_name, 'wb') as f:
            for chunk in r.iter_content(chunk_size=1024 * 1024):
            if chunk:
                f.write(chunk)
        print("%s downloaded!\n" % file_name)
        print("All videos downloaded!")
        return

if __name__ == "__main__":
    video_links = get_links()
    download_series(video_links)

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用PythonRequests库可以下载各种类型的内容,包括但不限于文本文件、图片、视频和压缩文件等。通过请求的方式,可以获取服务器上的文件,并将其保存在本地。对于下载超大文件时,可以使用Requests库的stream模式,以避免内存不足的情况发生。通过设置stream=True参数,可以使得响应对象不会立即下载完整的文件,而是分块下载文件内容,并逐步写入本地文件中。这样可以有效地节省内存的使用。 在使用Requests库进行下载时,可以通过发送GET请求获取文件内容。通过设置请求头和参数,可以模拟浏览器发送请求,并携带相应的信息。例如,可以设置请求头中的User-Agent字段来模拟浏览器的身份,以避免被网站识别为爬虫。在使用GET请求下载文件时,可以使用session.get(url, headers=headers)的方式发送请求,其中url为文件下载链接,headers为请求头信息。获取到响应对象后,可以通过response.content将文件内容保存到本地文件中,或者通过response.iter_content(chunk_size)逐块写入文件。 总而言之,通过使用PythonRequests库,可以方便地进行各种类型文件下载,包括超大文件。通过设置stream模式和使用GET请求,可以避免内存不足的问题,并且可以通过设置请求头和参数,模拟浏览器发送请求。这样可以使得下载过程更加灵活、高效。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python requests下载超大文件/批量下载文件](https://blog.csdn.net/Rick_M/article/details/128508994)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Python爬虫与Requests库笔记.md](https://download.csdn.net/download/weixin_52057528/88255142)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [python requests 下载zip包](https://blog.csdn.net/weixin_28689969/article/details/114912337)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值