使用python做爬虫时保存图片的方法大全以及需要注意的地方

1.使用urllib.urlretrieve()

用法:urlretrieve(url, filename=None, reporthook=None, data=None)

  • 参数 finename 指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)
  • 参数 reporthook 是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。
  • 参数 data 指 post 到服务器的数据,该方法返回一个包含两个元素的(filename, headers)元组,filename 表示保存到本地的路径,header 表示服务器的响应头。

py2代码示例:

# -*- coding: utf-8 -*-
import urllib
img_src = 'http://724.169pp.net/bizhi/2017/039/1.jpg'
urllib.urlretrieve(img_src,r'C:\\Users\\ME\\Desktop\\Python project\\pachong\\scrapy\\secondDemo\\photo\\1.jpg')

2.使用PIL+requests

PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。

requests是python实现的最简单易用的HTTP库,建议爬虫使用requests库。默认安装好python之后,是没有安装requests模块的,需要单独通过pip安装

BytesIO是用来操作二进制数据的,因为图片是二进制数据,和它相对的自然是StringIO,这是用来存str的。他们的区别就好似python读写普通文件和二进制文件。

py2代码示例:

# -*- coding: utf-8 -*-
import requests
from PIL import Image
from io import BytesIO
img_src = 'http://724.169pp.net/bizhi/2017/039/1.jpg'
response = requests.get(img_src)
image = Image.open(BytesIO(response.content))
image.save(r'C:\\Users\\ME\\Desktop\\Python project\\pachong\\scrapy\\secondDemo\\photo\\' + '1.jpg')

3.使用os+requests

os 模块提供了非常丰富的方法用来处理文件和目录,可参考   http://www.runoob.com/python3/python3-os-file-methods.html      例如


py3代码示例:

# -*- coding: utf-8 -*-
import urllib
import requests
import os
import codecs
url = 'http://724.169pp.net/bizhi/2017/039/1.jpg'
bytes = urllib.request.urlopen(url)
f = codecs.open(r'C:\\Users\\ME\\Desktop\\Python project\\pachong\\scrapy\\secondDemo\\photo\\' + '1.jpg', 'wb') # 代开一个文件,准备以二进制写入文件
f.write(bytes.read())  # write并不是直接将数据写入文件,而是先写入内存中特定的缓冲区
f.flush() # 将缓冲区的数据立即写入缓冲区,并清空缓冲区
f.close() # 关闭文件

需要注意的地方:

1.区分python2与3的版本,尤其是2的版本第一行一定要加

# -*- coding: utf-8 -*-

2.注意存入文件名,如果有中文,要注意编码转换

3.EOL while scanning string literal

参考   EOL while scanning string literal

最后得到的结果:


猜你喜欢

转载自blog.csdn.net/weixin_41931602/article/details/80605229