Python 요청 모듈로 PDF 파일 다운로드 및 저장
웹사이트에서 PDF 파일을 다운로드하여 디스크에 저장하려고 합니다.인코딩 오류로 인해 시도가 실패하거나 빈 PDF가 생성됩니다.
In [1]: import requests
In [2]: url = 'http://www.hrecos.org//images/Data/forweb/HRTVBSH.Metadata.pdf'
In [3]: response = requests.get(url)
In [4]: with open('/tmp/metadata.pdf', 'wb') as f:
...: f.write(response.text)
---------------------------------------------------------------------------
UnicodeEncodeError Traceback (most recent call last)
<ipython-input-4-4be915a4f032> in <module>()
1 with open('/tmp/metadata.pdf', 'wb') as f:
----> 2 f.write(response.text)
3
UnicodeEncodeError: 'ascii' codec can't encode characters in position 11-14: ordinal not in range(128)
In [5]: import codecs
In [6]: with codecs.open('/tmp/metadata.pdf', 'wb', encoding='utf8') as f:
...: f.write(response.text)
...:
코덱 문제인 건 알지만 작동이 안 되는 것 같습니다.
당신은 야합다니해를 사용해야 .response.content
경이우경:
with open('/tmp/metadata.pdf', 'wb') as f:
f.write(response.content)
문서에서:
텍스트가 아닌 요청에 대해 응답 본문에 바이트로 액세스할 수도 있습니다.
>>> r.content b'[{"repository":{"open_issues":0,"url":"https://github.com/...
그럼 다음을 의미합니다.response.text
출력을 문자열 개체로 반환하고 텍스트 파일을 다운로드할 때 사용합니다.HTML 파일 등.
그리고.response.content
출력을 바이트 개체로 반환하고 이진 파일을 다운로드할 때 사용합니다.PDF 파일, 오디오 파일, 이미지 등.
대신 사용할 수도 있습니다.그러나 다운로드하려는 파일이 클 때 사용합니다.다음은 문서에서 확인할 수 있는 기본 예제입니다.
import requests
url = 'http://www.hrecos.org//images/Data/forweb/HRTVBSH.Metadata.pdf'
r = requests.get(url, stream=True)
with open('/tmp/metadata.pdf', 'wb') as fd:
for chunk in r.iter_content(chunk_size):
fd.write(chunk)
chunk_size
사용할 청크 크기입니다. 경하우로 하면,2000
이 첫 합니다.2000
바이트를 파일에 기록하고, 완료되지 않은 경우 이 작업을 계속 반복합니다.
이렇게 하면 RAM을 절약할 수 있습니다.하지만 저는 사용하고 싶습니다.response.content
파일 크기가 작기 때문에 이 경우에는 대신 사용할 수 있습니다. 사한것럼을 합니다.response.raw
복잡합니다.
관련 항목:
Python 3에서는 pathlib이 가장 쉬운 방법이라고 생각합니다.요청의 response.content가 pathlib의 write_bytes와 잘 결합됩니다.
from pathlib import Path
import requests
filename = Path('metadata.pdf')
url = 'http://www.hrecos.org//images/Data/forweb/HRTVBSH.Metadata.pdf'
response = requests.get(url)
filename.write_bytes(response.content)
urllib를 사용할 수 있습니다.
import urllib.request
urllib.request.urlretrieve(url, "filename.pdf")
저는 초보자입니다.내 해결책이 잘못되었다면 언제든지 수정하거나 알려주시기 바랍니다.저도 새로운 것을 배울지도 모릅니다.
내 솔루션:
파일을 저장할 위치에 따라 downloadPath를 변경합니다.당신의 용도에 대해서도 절대 경로를 자유롭게 사용하세요.
아래를 downloadFile.py 으로 저장합니다.
용도:python downloadFile.py url-of-the-file-to-download new-file-name.extension
확장을 추가해야 합니다!
예: 사용 예:python downloadFile.py http://www.google.co.uk google.html
import requests
import sys
import os
def downloadFile(url, fileName):
with open(fileName, "wb") as file:
response = requests.get(url)
file.write(response.content)
scriptPath = sys.path[0]
downloadPath = os.path.join(scriptPath, '../Downloads/')
url = sys.argv[1]
fileName = sys.argv[2]
print('path of the script: ' + scriptPath)
print('downloading file to: ' + downloadPath)
downloadFile(url, downloadPath + fileName)
print('file downloaded...')
print('exiting program...')
일반적으로 이것은 Python3에서 작동해야 합니다.
import urllib.request
..
urllib.request.get(url)
Python2 이후에는 urllib와 urllib2가 제대로 작동하지 않는다는 것을 기억하세요.
일부 의문스러운 경우 요청이 작동하지 않는 경우(나에게 발생한 경우) 사용해 볼 수도 있습니다.
wget.download(url)
관련:
웹 페이지에서 모든 PDF 파일을 찾아 다운로드할 수 있는 적절한 설명/솔루션은 다음과 같습니다.
https://medium.com/ @dementorwriter/notes 다운로더-use-with-with-with-with-with-with-with-511ea9f55e48.
폴더에 쓸 케빈의 답변에 관하여.tmp
다음과 같이 해야 합니다.
with open('./tmp/metadata.pdf', 'wb') as f:
f.write(response.content)
그는 잊었습니다..
주소 앞에 그리고 물론 당신의 폴더.tmp
이미 생성되었어야 합니다.
언급URL : https://stackoverflow.com/questions/34503412/download-and-save-pdf-file-with-python-requests-module
'sourcecode' 카테고리의 다른 글
Spring Boot과 함께 dotenv 파일 사용 (0) | 2023.07.27 |
---|---|
mysql에서 float를 이중으로 변환하는 데 중요한 숫자를 처리하는 데 문제 (0) | 2023.07.27 |
UIPickerView가 로드된 후 행 선택 (0) | 2023.07.27 |
정적 필드는 내부적으로 정확히 어떻게 작동합니까? (0) | 2023.07.27 |
NumPy 배열에 숫자가 아닌 값이 하나 이상 포함되어 있는지 탐지하시겠습니까? (0) | 2023.07.27 |