Python 使用 urllib2 下载 PDF 会创建损坏的文档
Python downloading PDF with urllib2 creates corrupt document
上周我定义了一个从期刊网站下载 pdf 的函数。我使用以下方法成功下载了几个 pdf:
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')
当时,《心理科学》杂志上的 URL 就是这样排版的。下载的pdf就好了。
然后我又写了一些代码来实际生成 URL 列表并适当地命名文件,这样我就可以一次下载大量适当命名的 pdf 文档。
当我回来将我的两个脚本连接在一起时(抱歉使用非技术语言;我不是专家,只是自学了基础知识)相关期刊上 URLs 的格式有变了。在前面的 URL 之后,您将转到带有 URL 'http://journals.sagepub.com/doi/pdf/10.1177/0956797614553009' 的页面。现在 pdfDownload 功能不再起作用(无论是原始的 URL 还是新的 URL)。它创建了一个无法打开的 pdf "because the file is not a supported file type or has been damaged".
我很困惑,似乎所有的改变都是 URL 的格式,但实际上必须改变其他东西才能导致这个?任何帮助将不胜感激。
问题是新的 URL 指向一个网页——而不是原始的 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
.
上周我定义了一个从期刊网站下载 pdf 的函数。我使用以下方法成功下载了几个 pdf:
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')
当时,《心理科学》杂志上的 URL 就是这样排版的。下载的pdf就好了。
然后我又写了一些代码来实际生成 URL 列表并适当地命名文件,这样我就可以一次下载大量适当命名的 pdf 文档。
当我回来将我的两个脚本连接在一起时(抱歉使用非技术语言;我不是专家,只是自学了基础知识)相关期刊上 URLs 的格式有变了。在前面的 URL 之后,您将转到带有 URL 'http://journals.sagepub.com/doi/pdf/10.1177/0956797614553009' 的页面。现在 pdfDownload 功能不再起作用(无论是原始的 URL 还是新的 URL)。它创建了一个无法打开的 pdf "because the file is not a supported file type or has been damaged".
我很困惑,似乎所有的改变都是 URL 的格式,但实际上必须改变其他东西才能导致这个?任何帮助将不胜感激。
问题是新的 URL 指向一个网页——而不是原始的 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
.