2016-09-21 9 views
0

私がしようとしているのは、URLのリストをループして一連の.pdfsをダウンロードし、.zipに保存することです。現時点では、ただ1つのURLを使用してコードをテストしようとしています。私は取得していますERRORは次のとおりです。Pythonが.zipにPDFをダウンロードする

Traceback (most recent call last): 
    File "I:\test_pdf_download_zip.py", line 36, in <module> 
    zip_file(zipfile_name, url) 
    File "I:\test_pdf_download_zip.py", line 30, in zip_file 
    myzip.write(dowload_pdf(url)) 
TypeError: expected a string or other character buffer object 

誰かが正しく.zipファイルにPDFファイルの要求を渡す方法を知っているだろう(上記のエラーを回避する)私はそれを追加し、またはそれを行うことが可能であるかどうかを知るためにこの?

import os 
import zipfile 
import requests 

output = r"I:" 

# File name of the zipfile 
zipfile_name = os.path.join(output, "test.zip") 

# Random test pdf 
url = r"http://www.pdf995.com/samples/pdf.pdf" 

def create_zipfile(zipfile_name): 
    zipfile.ZipFile(zipfile_name, "w") 

def dowload_pdf(url): 
    response = requests.get(url, stream=True) 
    with open('test.pdf', 'wb') as f: 
     f.write(response.content) 

def zip_file(zip_name, url): 
    with open(zip_name,'a') as myzip: 
     myzip.write(dowload_pdf(url)) 

if __name__ == "__main__": 
    create_zipfile(zipfile_name) 
    zip_file(zipfile_name, url) 
    print("Done") 

答えて

0

あなたdownload_pdf()関数は、ファイルを保存しているが、それは何も返しません。ファイルパスを実際にmyzip.write()に戻すように変更する必要があります。あなたはtest.pdfをハードコードするのではなく、あなたのダウンロード機能にユニークなパスを渡すので、あなたのアーカイブに複数のtest.pdfが終わることはありません。

def dowload_pdf(url, path): 
    response = requests.get(url, stream=True) 
    with open(path, 'wb') as f: 
     f.write(response.content) 
    return path 
関連する問題