python 다운로드 파일 의 다양한 방법 집합

이 문 서 는 Python 이 파일 을 다운로드 하 는 여러 가지 방식 을 소개 합 니 다.간단 한 작은 파일 을 다운로드 하 는 것 부터 정지점 으로 전송 하 는 방식 으로 큰 파일 을 다운로드 합 니 다.
Requests
Requests 모듈 의 get 방법 을 사용 하여 url 에서 파일 을 다운로드 합 니 다.python 파충류 에 서 는 간단 한 웹 페이지 내용 을 다운로드 하 는 데 자주 사용 합 니 다.

import requests

#     bing.com
url = 'https://cn.bing.com/th?id=OHR.DerwentIsle_EN-CN8738104578_400x240.jpg'

def requests_download():

  content = requests.get(url).content

  with open('pic_requests.jpg', 'wb') as file:
    file.write(content)
urllib
python 에 내 장 된 urllib 모듈 의 url retrieve 방법 을 사용 하여 url 요청 을 파일 로 직접 저장 합 니 다.

from urllib import request

#     bing.com
url = 'https://cn.bing.com/th?id=OHR.DerwentIsle_EN-CN8738104578_400x240.jpg'

def urllib_download():
  request.urlretrieve(url, 'pic_urllib.jpg')
urllib3
urllib 3 는 Http 클 라 이언 트 에 사용 되 는 Python 모듈 로 연결 탱크 를 사용 하여 네트워크 에 접근 을 요청 합 니 다.

def urllib3_download():
  #        
  poolManager = urllib3.PoolManager()

  resp = poolManager.request('GET', url)

  with open("pic_urllib3.jpg", "wb") as file:
    file.write(resp.data)

  resp.release_conn()
wget
Linux 시스템 에 wget 명령 이 있어 인터넷 의 자원 을 편리 하 게 다운로드 할 수 있 고 Python 에 도 해당 하 는 wget 모듈 이 있 습 니 다.pip install 명령 으로 설치

import wget

#     bing.com
url = 'https://cn.bing.com/th?id=OHR.DerwentIsle_EN-CN8738104578_400x240.jpg'

def wget_download():
  wget.download(url, out='pic_wget.jpg')
명령 행 에서 wget 명령 을 직접 사용 할 수도 있 습 니 다.

python -m wget https://cn.bing.com/th?id=OHR.DerwentIsle_EN-CN8738104578_400x240.jpg
블록 으로 나 누 어 큰 파일 을 다운로드 하 다.
다운로드 해 야 할 파일 이 매우 크 고 컴퓨터 의 메모리 공간 이 전혀 부족 한 경우 requests 모듈 의 스 트림 모드 를 사용 할 수 있 습 니 다.기본 적 인 상황 에서 stream 인 자 는 False 이 고 파일 이 너무 많 으 면 메모리 가 부족 합 니 다.stream 매개 변수 가 True 일 때 requests 는 바로 다운로드 하지 않 고 iter 를 호출 합 니 다.content 혹은 iterlines 내용 옮 겨 다 닐 때 다운로드
iter_content:다운로드 할 내용 을 하나하나 옮 겨 다 니 며 iterlines:다운로드 할 내용 을 한 줄 한 줄 옮 겨 다 니 기

import requests

def steam_download():
  # vscode    
  url = 'https://vscode.cdn.azure.cn/stable/e5a624b788d92b8d34d1392e4c4d9789406efe8f/VSCodeUserSetup-x64-1.51.1.exe'

  with requests.get(url, stream=True) as r:
    with open('vscode.exe', 'wb') as flie:
      # chunk_size            1024 * 1024 bytes
      for chunk in r.iter_content(chunk_size=1024*1024):
        if chunk:
          flie.write(chunk)
진도 표
큰 파일 을 다운로드 할 때 진도 바 를 추가 하여 다운로드 인터페이스 를 미화 하면 다운로드 한 네트워크 속도 와 다운로드 한 파일 크기 를 실시 간 으로 알 수 있 습 니 다.여 기 는 tqdm 모듈 을 진도 바 로 표시 하고 pip install tqdm 로 설치 할 수 있 습 니 다.

from tqdm import tqdm

def tqdm_download():

  url = 'https://vscode.cdn.azure.cn/stable/e5a624b788d92b8d34d1392e4c4d9789406efe8f/VSCodeUserSetup-x64-1.51.1.exe'

  resp = requests.get(url, stream=True)

  #       
  file_size = int(resp.headers['content-length'])
  
  with tqdm(total=file_size, unit='B', unit_scale=True, unit_divisor=1024, ascii=True, desc='vscode.exe') as bar:
    with requests.get(url, stream=True) as r:
      with open('vscode.exe', 'wb') as fp:
        for chunk in r.iter_content(chunk_size=512):
          if chunk:
            fp.write(chunk)
            bar.update(len(chunk))
tqdm 매개 변수 설명:
total:bytes,전체 파일 의 크기
  • unit='B':bytes 단위 로 계산
  • unit_scale=True:M 단위 로 속 도 를 표시 합 니 다
  • unit_divisor=1024:파일 크기 와 속 도 는 1024 로 나 누고 기본 값 은 1000 으로 나 눕 니 다
  • ascii=True:진도 바 의 디 스 플레이 기 호 는 windows 시스템 을 호 환 하 는 데 사 용 됩 니 다
  • desc='vscode.exe'진도 표 앞 에 있 는 파일 이름
  • 예시 결과

    정지점 전송
    HTTP/1.1 프로 토 콜 요청 헤더 에 Range 라 는 필드 필드 를 추 가 했 습 니 다.Range 필드 필드 필드 는 파일 을 다운로드 한 내용 부터 계속 다운로드 하도록 합 니 다.
    사이트 가 Range 필드 필드 에서 응답 을 요청 하 는 상태 코드 를 206(Partial Content)으로 지원 하지 않 으 면 416(required Range not satisfiable)입 니 다.
    Range 형식
    
    Range:[unit=first byte pos] - [last byte pos],  Range =       -      ,  :bytes
    Range 를 headers 에 추가 하기
    
    from tqdm import tqdm
    
    def duan_download():
      url = 'https://vscode.cdn.azure.cn/stable/e5a624b788d92b8d34d1392e4c4d9789406efe8f/VSCodeUserSetup-x64-1.51.1.exe'
    
      r = requests.get(url, stream=True)
    
      #       
      file_size = int(r.headers['content-length'])
    
      file_name = 'vscode.exe'
      #             ,    0     ,
      first_byte = 0
      if os.path.exists(file_name):
        first_byte = os.path.getsize(file_name)
        
      #           
      if first_byte >= file_size:
        return
    
      # Range      
      header = {"Range": f"bytes={first_byte}-{file_size}"}
    
      #      initial   
      with tqdm(total=file_size, unit='B', initial=first_byte, unit_scale=True, unit_divisor=1024, ascii=True, desc=file_name) as bar:
        #   headers   
        with requests.get(url, headers = header, stream=True) as r:
          with open(file_name, 'ab') as fp:
            for chunk in r.iter_content(chunk_size=512):
              if chunk:
                fp.write(chunk)
                bar.update(len(chunk))
    예시 결과
    다운 로드 를 시작 한 후 스 크 립 트 를 닫 고 다시 실행 합 니 다.파일 은 끊 긴 내용 을 계속 다운로드 합 니 다.

    총결산
    본 고 는 자주 사용 하 는 7 중 파일 다운로드 방식 을 소개 하 였 으 며,다른 다운로드 방식 은 여러분 이 댓 글 에서 교류 하고 교류 하 며 공동으로 발전 할 수 있 습 니 다.
    예시 코드:Python 에서 파일 을 다운로드 하 는 여러 가지 방법
    이상 은 python 에서 파일 을 다운로드 하 는 여러 가지 방법 을 모 은 상세 한 내용 입 니 다.python 에서 파일 을 다운로드 하 는 데 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

    좋은 웹페이지 즐겨찾기