使用urllib2下载PDF的Python会创建损坏的文档

时间:2016-12-14 15:56:29

标签: python python-2.7 pdf-generation urllib2

上周我定义了一个从期刊网站下载pdf的功能。我使用以下方法成功下载了几个pdfs:

import urllib2
def pdfDownload(url):
    response=urllib2.urlopen(url)
    expdf=response.read()
    egpdf=open('ex.pdf','wb')
    egpdf.write(expdf)
    egpdf.close()

我用以下方法尝试了这个功能:

 pdfDownload('http://pss.sagepub.com/content/26/1/3.full.pdf')

当时,这就是“心理科学”杂志上的网址格式化的方式。 pdf下载得很好。

然后我又写了一些代码来实际生成URL列表并正确命名文件,这样我就可以一次下载大量适当命名的pdf文档。

当我回来加入我的两个脚本时(抱歉非技术语言;我不是专家,刚刚自学了基础知识)相关期刊上的URL格式已经改变。按照上一个网址,您将转到包含网址“http://journals.sagepub.com/doi/pdf/10.1177/0956797614553009”的网页。现在pdfDownload函数不再起作用(使用原始URL或新URL)。它创建了一个无法打开的pdf“因为该文件不是受支持的文件类型或已被损坏”。

我很困惑,似乎所有改变的是URL的格式,但实际上其他东西必须改变才能产生这个?任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:2)

问题是新网址指向网页 - 而不是原始PDF。如果你打印“expdf”的值,你会得到一堆HTML - 而不是你期望的二进制数据。

我能够通过一个小小的调整来使用你的原始函数 - 我使用requests库来下载文件而不是urllib2。 requests似乎使用您从当前实现获得的html中引用的加载器来提取文件。试试这个:

import requests
def pdfDownload(url):
    response=requests.get(url)
    expdf=response.content
    egpdf=open('ex.pdf','wb')
    egpdf.write(expdf)
    egpdf.close()

如果您使用的是Python 3,那么您已经拥有requests;如果您使用的是Python 2.7,则需要pip install requests