使用urllib下载pdf?

use*_*185 18 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')
Run Code Online (Sandbox Code Playgroud)

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

小智 21

这是一个有效的例子:

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()
Run Code Online (Sandbox Code Playgroud)

它已经过测试

  • 正如shockburner所述,你需要使用open("document.pdf","wb") (2认同)
  • 这也可以在 python3 中工作。您所要做的就是将两个位置中的“urllib2”更改为“urllib.requests”。 (2认同)

sho*_*ner 12

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


小智 5

尝试使用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')
Run Code Online (Sandbox Code Playgroud)