在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
。一旦该文件被打开,安装并导入以下软件包。
一旦你导入了这些文件,创建一个url
变量,设置为输入
语句,询问图片的URL。
此外,创建另一个同样设置为输入语句的变量:file_name
。
在下一行代码中,实现请求模块中的get()
方法,以检索图像。该方法将接收两个参数,即你之前创建的url
变量和流。
通过添加第二个参数来保证方法运行时不会发生中断。
copyfileobj()
方法将你的图像写成文件名,在本地以二进制写入模式建立文件,并用shutil
将其保存在本地。虽然没有必要,但在条件语句中使用Request的Status Code检查图像是否被成功检索到是很好的。
你完成的脚本应该看起来像这样。
通过在终端运行以下命令来执行你的脚本。
你下载的图片将保存在新创建的download-images-python
目录中。恭喜你,你现在可以要求下载你心目中所有的图片了。
使用urllib下载图片
在Python中下载数据的另一个受欢迎的方法是通过urllib
,这个包收集了几个用于处理URL的模块,包括。
-
urllib.require,用于打开和阅读。
-
urllib.parse用于解析URLs。
-
urllib.error用于处理由urllib.request引发的任何异常。
-
urllib.robotparser用于解析robot.txt文件。
要了解更多关于urllib
模块的信息,请参考这里的文档,但现在你已经知道了基本知识,是时候开始了
如果你当前的环境中没有urllib
,请通过执行下面的代码来安装它。
注意,如果你使用的是Python 2,不幸的是,这段代码将不能在你的环境中工作,但本节的末尾包括一个与Python 2兼容的脚本。
一旦你安装了urllib
,为你的项目创建一个新目录,mkdir python-image-downloads
。如果你已经在上一节中创建了这个目录,就不需要再重复这个步骤。在该目录下创建一个images文件夹,以及一个dl_img.py
文件。导航到你的dl_img.py
文件,并在顶部插入以下一行代码来导入urllib
包。
导入模块后,你的任务是制作一个用户友好的脚本,使你能快速而有组织地下载图片。首先,从一个输入函数中创建一个url
变量。
然后用另一个输入语句决定你想让你的图像文件保存为什么。
有了这两个保存下载和组织新创建的图像文件所需数据的变量,就可以编写保存图像的代码了。首先定义一个函数,该函数接收三个参数,你的url
变量,你想保存图像的指定文件路径
,以及之前设置的file_name
。
在这个函数中,创建一个图片的全路径
,即图片将被保存到哪里。图片的全路径将是file_path
与file_name
相连接,并在最后加上'.jpeg'
字符串。*类似地,如果你想把你的图像保存为PNG,你可以使用'.png'
。
要创建实际下载图片的代码,你需要整合urllib.request
和urlretrieve
,它们将根据给定的参数自动下载和保存图片.
在你的脚本结尾处调用该函数,应该与此类似。
当你调用download_image
时,你需要再次传递三个参数,这次是你的url
,文件路径,也就是你一开始创建的'images/'
文件夹,以及你选择的file_name。
信不信由你,这就是了只要你在你的Python-image-downloads
目录中,用下面的代码在终端运行你的脚本。
伟大的工作!你刚刚使用urllib
软件包在Python中下载了你的第一个图像。
如果你还没有升级Python 3,你可能会发现自己收到关于urllib.request
的几个错误,以下代码应该与Python 2兼容。
与Python 3不同,版本2不支持urllib.request
包。作为替代,你可以导入
urllib2并利用urlopen(request).read()
来读取图片的URL,然后下载到你的本地环境。然而,现在图像将直接保存到python-image-downloads
目录,而不是images
文件夹。
使用Wget模块
除了Requests
和Urlib
包之外,还可以通过采用wget模块在Python中下载图片。如果你已经在里面做了python-image-download
导航,如果没有,现在就创建它。在该目录下创建一个wget_img_dl.py
文件,并像这样导入wget
模块。
一旦你安装并导入了wget,设置一个url
变量,等于一个指定图像地址的输入语句。
利用wget.download
将url
变量作为一个参数传入,并将其设置为一个file_name
变量,之后你就可以通过它来访问。
完整的脚本应该与此相近。
这就是全部!你可以运行你的脚本。
[文中代码源自Scrapingbee]
总 结
当然,这些方法中的每一种都有优点和缺点。如果你在安装 Requests 包时遇到问题,或者想在你的程序中减少依赖性,urllib 可能是你最好的选择。然而,Requests 模块已经成为在 Python 中下载任何东西的流行和可靠的方法,甚至urllib 文档也推荐它作为高级 HTTP 客户端接口。
你也可以在这里访问源代码。