上周我定义了一个从期刊网站下载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的格式,但实际上其他东西必须改变才能产生这个?任何帮助都将非常感激。
答案 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
。