python下载图片的问题思考
最近用python下载图片的时候遇到了点问题,觉得很有趣。
功能很简单就是用python的urllib2库下载网页中的图片到本地。
网页上显示的图片是这样的:
但是下载到本地后却变成了这样:
这让我很奇怪,难道我下载的姿势不对。
然后我就分析这两张照片的差别,先比对了大小:
可以看到下载后的图片比原始图片多了 93 字节,看来是python在写入文件的时候偷偷加了东西。
于是我用二进制比对工具进行比对,看看到底多了什么?
下面是截取的一部分:
可以看到多了 0D 这个字节,仔细分析会发现0D的后面就是 0A ,也就是 python 在写入文件的时候看到有0A就在前面补了个 0D ,多的这 93 个字节就是这么来的。如果熟悉ASCII码表的同学立即就会想到 0D 0A 就是“\r\n”,也就是程序在写入的时候把 0A 解析出来了。这样问题就很明显了,我在写入的时候没有把文件当成二进制来写入。
handle = open(path, 'w')
检查写入文件的部分代码果然是这样。
当然问题很简单,但是我觉得思路很好。可能问题的表象很复杂,很奇怪,上层的语言封装很多,语法糖千奇百怪,但是如果能去分析它的本质,也许会更简单些。