python下载图片的问题思考

最近用python下载图片的时候遇到了点问题,觉得很有趣。

功能很简单就是用python的urllib2库下载网页中的图片到本地。

网页上显示的图片是这样的:

但是下载到本地后却变成了这样:

这让我很奇怪,难道我下载的姿势不对。

然后我就分析这两张照片的差别,先比对了大小:

可以看到下载后的图片比原始图片多了 93 字节,看来是python在写入文件的时候偷偷加了东西。

于是我用二进制比对工具进行比对,看看到底多了什么?

下面是截取的一部分:

可以看到多了 0D 这个字节,仔细分析会发现0D的后面就是 0A ,也就是 python 在写入文件的时候看到有0A就在前面补了个 0D ,多的这 93 个字节就是这么来的。如果熟悉ASCII码表的同学立即就会想到 0D 0A 就是“\r\n”,也就是程序在写入的时候把 0A 解析出来了。这样问题就很明显了,我在写入的时候没有把文件当成二进制来写入。

handle = open(path, 'w')

检查写入文件的部分代码果然是这样。

当然问题很简单,但是我觉得思路很好。可能问题的表象很复杂,很奇怪,上层的语言封装很多,语法糖千奇百怪,但是如果能去分析它的本质,也许会更简单些。

posted @ 2017-12-02 17:47  wkrs  阅读(196)  评论(0编辑  收藏  举报