【问题标题】:Can not open downloaded PDF files无法打开下载的 PDF 文件
【发布时间】:2015-04-20 01:36:05
【问题描述】:

我正在尝试下载与研究人员相关的所需 PDF。

但是下载的PDF无法打开,说明文件可能已损坏或格式错误。而测试中使用的另一个 URL 生成了正常的 PDF 文件。你有什么建议吗?

 import requests  
 from bs4 import BeautifulSoup  


 def download_file(url, index):  
     local_filename = index+"-"+url.split('/')[-1]  
     # NOTE the stream=True parameter  
     r = requests.get(url, stream=True)  
     with open(local_filename, 'wb') as f:  
         for chunk in r.iter_content(chunk_size=1024):  
             if chunk: # filter out keep-alive new chunks  
                 f.write(chunk)  
                 f.flush()  
     return local_filename  


 # For Test:   http://ww0.java4.datastructures.net/handouts/
 # Can't open: http://flyingv.ucsd.edu/smoura/publications.html

 root_link="http://ecal.berkeley.edu/publications.html#journals"

 r=requests.get(root_link)  
 if r.status_code==200:  
     soup=BeautifulSoup(r.text)  
     # print soup.prettify()  
     index=1  
     for link in soup.find_all('a'):  
         new_link=root_link+link.get('href')
         if new_link.endswith(".pdf"):  
             file_path=download_file(new_link,str(index))  
             print "downloading:"+new_link+" -> "+file_path  
             index+=1  
     print "all download finished"  
 else:  
     print "errors occur."

【问题讨论】:

  • 你真的看过文件内容了吗?
  • 其实我检查了下载链接,它们是错误的目录。现在我解决了这个问题,谢谢!但是修复目录意味着这个程序不能普遍使用,这是我正在努力解决的问题。

标签: file python-2.7 pdf download python-requests


【解决方案1】:

您的代码有一条注释说:

# Can't open: http://flyingv.ucsd.edu/smoura/publications.html

看起来您无法打开的是 HTML 文件。所以难怪PDF阅读器会抱怨它......

对于我遇到问题的任何真实 PDF 链接,我将按以下步骤操作:

  1. 使用其他方法(wgetcurl、浏览器...)下载文件。
    • 还能下载吗?还是有一些密码圈可以跳过?
    • 下载速度快+完整吗?
  2. 然后它会在 PDF 查看器中打开吗?
    • 如果是这样,请与您的脚本下载的文件进行比较。
      • 有什么区别?
      • 它们可能是由您的脚本引起的吗?
      • 前几百行没有区别,但后面有区别吗?文件结尾是一堆空字节?那么您的下载未完成...
    • 如果不是这样,仍然比较差异。如果没有,则说明您的脚本没有问题。 PDF 可能真的已损坏...
  3. 在文本编辑器中打开时是什么样的?

【讨论】:

  • 是的,实际上我正在尝试下载此 root_link 页面中所有链接的 pdf 文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
相关资源
最近更新 更多