in

如何使用Python下载图像?

blank

在Python中处理图片给了你一系列的开发能力,从用URL下载图片到检索照片属性。但是,首先,你究竟如何才能获得这些图片呢?

在这篇文章中,你将了解在Python中用于下载图片的几种不同方法。


首要条件

为了从这个职位中充分受益,你应该具备以下条件。

  • 对Python 2或Python 3有一定经验。
  • 在你的本地机器上安装了Python 3。

使用Python从URL下载并保存图片

使用Requests包

作为Python中最流行的HTTP客户端,Requests包对于初学者来说是优雅的、易于使用的。许多开发者认为它是在Python中下载任何文件类型的方便方法。

假设你的本地环境安装了Python 3,创建一个目录mkdir download-images-python,并加入request_python_img_dl.py。一旦该文件被打开,安装并导入以下软件包。

Using the Requests Package1

一旦你导入了这些文件,创建一个url变量,设置为输入语句,询问图片的URL。

Using the Requests Package2

此外,创建另一个同样设置为输入语句的变量:file_name

Using the Requests Package3

在下一行代码中,实现请求模块中的get()方法,以检索图像。该方法将接收两个参数,即你之前创建的url变量和流。 通过添加第二个参数来保证方法运行时不会发生中断

Using the Requests Package4

copyfileobj()方法将你的图像写成文件名,在本地以二进制写入模式建立文件,并用shutil将其保存在本地。虽然没有必要,但在条件语句中使用Request的Status Code检查图像是否被成功检索到是很好的。

Using the Requests Package5

你完成的脚本应该看起来像这样。

Using the Requests Package6

通过在终端运行以下命令来执行你的脚本。

Using the Requests Package7

你下载的图片将保存在新创建的download-images-python目录中。恭喜你,你现在可以要求下载你心目中所有的图片了。


使用urllib下载图片

在Python中下载数据的另一个受欢迎的方法是通过urllib,这个包收集了几个用于处理URL的模块,包括。

  • urllib.require,用于打开和阅读。

  • urllib.parse用于解析URLs。

  • urllib.error用于处理由urllib.request引发的任何异常。

  • urllib.robotparser用于解析robot.txt文件。

要了解更多关于urllib模块的信息,请参考这里的文档,但现在你已经知道了基本知识,是时候开始了

如果你当前的环境中没有urllib,请通过执行下面的代码来安装它。

使用urllib下载图片1

注意,如果你使用的是Python 2,不幸的是,这段代码将不能在你的环境中工作,但本节的末尾包括一个与Python 2兼容的脚本。

一旦你安装了urllib,为你的项目创建一个新目录,mkdir python-image-downloads。如果你已经在上一节中创建了这个目录,就不需要再重复这个步骤。在该目录下创建一个images文件夹,以及一个dl_img.py文件。导航到你的dl_img.py文件,并在顶部插入以下一行代码来导入urllib包。

使用urllib下载图片2

导入模块后,你的任务是制作一个用户友好的脚本,使你能快速而有组织地下载图片。首先,从一个输入函数中创建一个url变量。

使用urllib下载图片3

然后用另一个输入语句决定你想让你的图像文件保存为什么。

使用urllib下载图片4

有了这两个保存下载和组织新创建的图像文件所需数据的变量,就可以编写保存图像的代码了。首先定义一个函数,该函数接收三个参数,你的url变量,你想保存图像的指定文件路径,以及之前设置的file_name

使用urllib下载图片5

在这个函数中,创建一个图片的全路径,即图片将被保存到哪里。图片的全路径将是file_pathfile_name相连接,并在最后加上'.jpeg'字符串。*类似地,如果你想把你的图像保存为PNG,你可以使用'.png'

使用urllib下载图片6

要创建实际下载图片的代码,你需要整合urllib.requesturlretrieve,它们将根据给定的参数自动下载和保存图片.

使用urllib下载图片7

在你的脚本结尾处调用该函数,应该与此类似。

使用urllib下载图片8

当你调用download_image时,你需要再次传递三个参数,这次是你的url,文件路径,也就是你一开始创建的'images/'文件夹,以及你选择的file_name。

信不信由你,这就是了只要你在你的Python-image-downloads目录中,用下面的代码在终端运行你的脚本。

使用urllib下载图片9

伟大的工作!你刚刚使用urllib软件包在Python中下载了你的第一个图像。

如果你还没有升级Python 3,你可能会发现自己收到关于urllib.request的几个错误,以下代码应该与Python 2兼容。

使用urllib下载图片10

与Python 3不同,版本2不支持urllib.request包。作为替代,你可以导入

urllib2并利用urlopen(request).read()来读取图片的URL,然后下载到你的本地环境。然而,现在图像将直接保存到python-image-downloads目录,而不是images文件夹。


使用Wget模块

除了RequestsUrlib包之外,还可以通过采用wget模块在Python中下载图片。如果你已经在里面做了python-image-download导航,如果没有,现在就创建它。在该目录下创建一个wget_img_dl.py文件,并像这样导入wget模块。

使用Wget模块1

一旦你安装并导入了wget,设置一个url变量,等于一个指定图像地址的输入语句。

使用Wget模块2

利用wget.downloadurl变量作为一个参数传入,并将其设置为一个file_name变量,之后你就可以通过它来访问。

使用Wget模块3

完整的脚本应该与此相近。

使用Wget模块4

这就是全部!你可以运行你的脚本。

使用Wget模块5

 

[文中代码源自Scrapingbee]

总    结

当然,这些方法中的每一种都有优点和缺点。如果你在安装 Requests 包时遇到问题,或者想在你的程序中减少依赖性,urllib 可能是你最好的选择。然而,Requests 模块已经成为在 Python 中下载任何东西的流行和可靠的方法,甚至urllib 文档也推荐它作为高级 HTTP 客户端接口。

你也可以在这里访问源代码。

blank

Written by 爬取 大师

阿里P12级别选手,能够突破各种反爬, 全能的爬取大师,擅长百万级的数据抓取!没有不能爬,只有你不敢想,有爬取项目可以联系我邮箱 [email protected] (带需求和预算哈, 不然多半不回复)