使用urllib下载pdf?

时间:2014-07-19 20:33:14

标签: python pdf urllib

我正在尝试使用urllib从网站下载pdf文件。这是我到目前为止所得到的:

import urllib

def download_file(download_url):
    web_file = urllib.urlopen(download_url)
    local_file = open('some_file.pdf', 'w')
    local_file.write(web_file.read())
    web_file.close()
    local_file.close()

if __name__ == 'main':
    download_file('http://www.example.com/some_file.pdf')

当我运行此代码时,我得到的只是一个空的pdf文件。我做错了什么?

5 个答案:

答案 0 :(得分:20)

这是一个有效的例子:

import urllib2

def main():
    download_file("http://mensenhandel.nl/files/pdftest2.pdf")

def download_file(download_url):
    response = urllib2.urlopen(download_url)
    file = open("document.pdf", 'wb')
    file.write(response.read())
    file.close()
    print("Completed")

if __name__ == "__main__":
    main()

答案 1 :(得分:11)

open('some_file.pdf', 'w')更改为open('some_file.pdf', 'wb'),pdf文件为二进制文件,因此您需要' b'。几乎任何你无法在文本编辑器中打开的文件都是如此。

答案 2 :(得分:4)

尝试使用urllib.retrieve(Python 3)并执行此操作:

from urllib.request import urlretrieve

def download_file(download_url):
    urlretrieve(download_url, 'path_to_save_plus_some_file.pdf')

if __name__ == 'main':
    download_file('http://www.example.com/some_file.pdf')

答案 3 :(得分:2)

尝试了上面的代码,在某些情况下它们可以正常工作,但是对于其中嵌入了pdf的某些网站,您可能会收到类似 HTTPError:HTTP Error 403:Forbidden 的错误。这样的网站具有一些服务器安全功能,这些功能将阻止已知的僵尸程序。在使用urllib的情况下,它将使用标头,其标题为====> python urllib / 3.3.0 。因此,我建议也将自定义标头添加到urllib的请求模块中,如下所示。

from urllib.request import Request, urlopen 
import requests  
url="https://realpython.com/python-tricks-sample-pdf"  
import urllib.request  
req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})  
r = requests.get(url)

with open("<location to dump pdf>/<name of file>.pdf", "wb") as code:
    code.write(r.content)

答案 4 :(得分:1)

我建议使用以下代码行

import urllib.request
import shutil
url = "link to your website for pdf file to download"
output_file = "local directory://name.pdf"
with urllib.request.urlopen(url) as response, open(output_file, 'wb') as out_file:
     shutil.copyfileobj(response, out_file)