【问题标题】:urllib2 downloads corrupt .jpg filesurllib2 下载损坏的 .jpg 文件
【发布时间】:2018-09-10 05:45:27
【问题描述】:

我有一个 Python 程序,我需要在其中从 Internet 下载 .jpg 文件。我有一个while True: 循环,它遍历我拥有的 URL 并从每个 URL 下载一个文件。每 20 个左右的文件,urllib2 下载一个半灰色的文件,FPDF 由于损坏的文件而拒绝从下载的文件中制作 PDF。 这是我的代码:

filename = ''.join(pageForFilename)
add_image_to_list()
file_ = open(filename, 'w')
file_.write(data)
file_.close()

time.sleep(0.5)

注意 pageForFilename 是 page-001.jpg 可能很有用 我想也许我不允许脚本完全下载文件,所以我添加了一个time.sleep(0.5),认为它会修复它。 python 2.7 MacOS Sierra

【问题讨论】:

  • 您认为 URLLib2 正在破坏文件。当然,您通过“手动”(通过浏览器、使用 curl、或使用 FTP 程序或任何其他方式)下载此类损坏的文件来验证这一点,并且您得到了正确的文件。对吗?
  • 在不知道您正在下载什么文件的情况下,很难调试出了什么问题。也许有些文件实际上是 JPEG2000 而不是 JFIF,而您的 JPG 到 PDF 代码无法处理这些文件。或者,即使在 JFIF 中,您的代码也可能无法处理灰度 JPG。也许它们甚至被错误地标记为 PNG 或 GIF 文件。谁知道?
  • @usr2564301 是的,我已经尝试从 URL 手动获取文件,但没有遇到任何问题。
  • @Squ1dd13Dev 您确认它们实际上是 JPEG/JFIF 文件,并且您的 FPDF 可以处理它们?
  • 是的。如果我取出损坏的文件,FPDF 可以处理它们并创建 PDF。我从中下载的 url 以 .jpg 结尾,我的操作系统验证它们是 jpeg 文件

标签: python python-2.7 urllib2


【解决方案1】:

问题出在(如果您在 Windows 中):

file_ = open(filename, 'w')

您正在将文件写入文本。

尝试:

file_ = open(filename, 'wb')

您是否将文件强制为二进制文件。

【讨论】:

  • 我在 Mac 上,但 pageForFilename 是 page-001.jpg。当然,如果我试图保存为文本文件,那么保存的每个文件都会损坏吗?就目前而言,它是每 20 个左右。尝试这个时我也遇到了同样的问题。
  • @Squ1dd13Dev 那么这可能不是你的问题——但是在编写二进制文件时你仍然应该使用二进制模式。使用文本文件是错误的做法,即使您有时会侥幸逃脱。
  • @Squ1dd13Dev 另外,您还没有告诉我们pageForFilename 对您的程序意味着什么,或者为什么您认为文件名应该对事物产生任何影响,而且很难猜测为什么您认为它是相关的.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-19
  • 2022-11-11
  • 1970-01-01
  • 2017-04-30
  • 2015-07-14
  • 2015-07-16
  • 2017-12-04
相关资源
最近更新 更多