일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 컴퓨터비전
- Yes
- 클라우드컴퓨팅
- 버전관리
- 코딩
- 머신러닝
- 파이썬
- 데이터과학
- 빅데이터
- 프로그래밍
- 소프트웨어
- 사이버보안
- 데이터구조
- I'm Sorry
- 보안
- 컴퓨터공학
- 자료구조
- 딥러닝
- 컴퓨터과학
- 프로그래밍언어
- 소프트웨어공학
- 데이터분석
- 2
- 데이터베이스
- 웹개발
- 알고리즘
- 인공지능
- 네트워크
- 자바스크립트
- 네트워크보안
- Today
- Total
스택큐힙리스트
파이썬 3에서 웹에서 파일 다운로드하기 본문
저는 같은 게임/애플리케이션의 .jad 파일에 지정된 URL을 읽어서 웹 서버에서 .jar (java) 파일을 다운로드하는 프로그램을 만들고 있습니다. 저는 Python 3.2.1을 사용하고 있습니다.
제가 JAD 파일에서 JAR 파일의 URL을 추출하는데 성공했습니다(JAD 파일에는 JAR 파일의 URL이 포함되어 있습니다). 그러나 추출된 값이 문자열 형식이라는 것을 상상하실 수 있습니다.
여기에 관련 함수가 있습니다:
def downloadFile(URL=None):
import httplib2
h = httplib2.Http(.cache)
resp, content = h.request(URL, GET)
return content
downloadFile(URL_from_file)
하지만 항상 위의 함수에서 유형은 문자열이 아니라 바이트 여야한다는 오류가 발생합니다. URL.encode('utf-8') 및 bytes(URL, encoding='utf-8')을 사용해 보았지만 항상 동일하거나 유사한 오류가 발생합니다.
기본적으로 제 질문은 URL이 문자열 타입으로 저장된 경우 서버에서 파일을 다운로드하는 방법입니다.
답변 1
만약 웹 페이지의 내용을 변수로 얻고 싶다면, 단순히 read 의 응답을 urllib.request.urlopen 로 할당하세요.
import urllib.request
...
url = 'http://example.com/'
response = urllib.request.urlopen(url)
data = response.read() # a `bytes` object
text = data.decode('utf-8') # a `str`; this step can't be used if data is binary
파일을 다운로드하고 저장하는 가장 쉬운 방법은 urllib.request.urlretrieve 기능을 사용하는 것입니다.
import urllib.request
...
# Download the file from `url` and save it locally under `file_name`:
urllib.request.urlretrieve(url, file_name)
import urllib.request
...
# Download the file from `url`, save it in a temporary directory and get the
# path to it (e.g. '/tmp/tmpb48zma.txt') in the `file_name` variable:
file_name, headers = urllib.request.urlretrieve(url)
하지만 유의해 주세요. urlretrieve 는 legacy 로 간주되고 폐기될 수도 있습니다 (하지만 왜 그런지는 알 수 없습니다).
이것을 수행하는 가장 정확한 방법은 urllib.request.urlopen 함수를 사용하여 HTTP 응답을 나타내는 파일 유사 객체를 반환하고 shutil.copyfileobj 를 사용하여 실제 파일에 복사하는 것입니다.
import urllib.request
import shutil
...
# Download the file from `url` and save it locally under `file_name`:
with urllib.request.urlopen(url) as response, open(file_name, 'wb') as out_file:
shutil.copyfileobj(response, out_file)
이게 너무 복잡하게 느껴진다면, 더 간단하게 처리하고 전체 다운로드를 bytes 개체에 저장한 후에 파일에 작성하는 방법을 고려해 볼 수 있습니다. 하지만 이 방법은 작은 파일에 대해서만 잘 작동합니다.
import urllib.request
...
# Download the file from `url` and save it locally under `file_name`:
with urllib.request.urlopen(url) as response, open(file_name, 'wb') as out_file:
data = response.read() # a `bytes` object
out_file.write(data)
압축된 데이터 .gz (그리고 다른 형식일 수도 있음)을 동시에 추출하는 것이 가능하지만, 이런 작업을 수행하려면 HTTP 서버가 파일에 대한 임의 접근을 지원해야 할 것입니다.
import urllib.request
import gzip
...
# Read the first 64 bytes of the file inside the .gz archive located at `url`
url = 'http://example.com/something.gz'
with urllib.request.urlopen(url) as response:
with gzip.GzipFile(fileobj=response) as uncompressed:
file_header = uncompressed.read(64) # a `bytes` object
# Or do anything shown above using `uncompressed` instead of `response`.
답변 2
파이썬 3을 사용하여 웹에서 파일 다운로드하기웹에서 파일을 다운로드하는 것은 매우 일반적이고 필요한 작업입니다. 파이썬 프로그래밍 언어는 이를 하기 위한 간단하고 직관적인 방법을 제공합니다. 이 문서에서는 파이썬 3을 사용하여 웹에서 파일을 다운로드하는 방법을 쉽게 설명합니다.
먼저, 다운로드하려는 파일이 있는 웹 페이지로 이동해야 합니다. 이 페이지의 URL 주소를 복사하여 파이썬 코드의 변수에 할당합니다. 그리고 `requests` 라이브러리를 이용하여 해당 URL에서 파일을 요청하고 다운로드합니다.
간단한 코드는 다음과 같습니다.
```python
import requests
url = 'http://example.com/file.txt'
response = requests.get(url)
with open('file.txt', 'wb') as file:
file.write(response.content)
```
이 코드를 실행하면 `'file.txt'`로 파일이 다운로드됩니다. `with` 문을 사용하면 파일 스트림을 열고 작업이 끝나면 자동으로 닫힙니다.
URL 주소를 변수에 할당하는 것 외에도 여러 가지 방법으로 웹에서 파일을 다운로드할 수 있습니다. 예를 들어 FTP 프로토콜을 사용하는 경우 `ftplib` 라이브러리를 이용하면 됩니다.
이런 방법으로 파이썬을 사용하여 웹에서 파일을 다운로드하는 것은 매우 쉽습니다. 이를 자유롭게 사용하여 여러분의 필요에 맞게 활용해 보세요.