- Python 网络爬虫教程
- Python 网络爬虫 - 首页
- 简介
- Python 入门
- 用于网络爬虫的 Python 模块
- 网络爬虫的合法性
- 数据提取
- 数据处理
- 图像和视频处理
- 处理文本
- 爬取动态网站
- 爬取基于表单的网站
- 处理验证码
- 使用爬虫进行测试
- Python 网络爬虫资源
- Python 网络爬虫 - 快速指南
- Python 网络爬虫 - 资源
- Python 网络爬虫 - 讨论
图像和视频处理
网络爬虫通常涉及下载、存储和处理网络媒体内容。 在本章中,让我们了解如何处理从网络下载的内容。
简介
我们在爬虫过程中获得的网络媒体内容可以是图像、音频和视频文件,以非网页以及数据文件的形式存在。 但是,我们是否可以信任下载的数据,尤其是在我们要下载并存储到计算机内存中的数据扩展名方面? 这使得了解我们要本地存储的数据类型至关重要。
从网页获取媒体内容
在本节中,我们将学习如何下载媒体内容,这些内容根据 Web 服务器的信息正确表示媒体类型。 我们可以在前面章节中使用的 Python **requests** 模块的帮助下做到这一点。
首先,我们需要导入必要的 Python 模块,如下所示:
import requests
现在,提供我们要下载并本地存储的媒体内容的 URL。
url = "https://authoraditiagarwal.com/wpcontent/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg"
使用以下代码创建 HTTP 响应对象。
r = requests.get(url)
借助以下代码行,我们可以将接收到的内容保存为 .png 文件。
with open("ThinkBig.png",'wb') as f: f.write(r.content)
运行上述 Python 脚本后,我们将得到一个名为 ThinkBig.png 的文件,其中包含下载的图像。
从 URL 中提取文件名
从网站下载内容后,我们还希望将其保存在一个文件中,文件名在 URL 中找到。 但是我们还可以检查 URL 中是否存在其他片段的数量。 为此,我们需要从 URL 中找到实际的文件名。
借助以下 Python 脚本,使用 **urlparse**,我们可以从 URL 中提取文件名:
import urllib3 import os url = "https://authoraditiagarwal.com/wpcontent/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg" a = urlparse(url) a.path
您可以观察到如下所示的输出:
'/wp-content/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg' os.path.basename(a.path)
您可以观察到如下所示的输出:
'MetaSlider_ThinkBig-1080x180.jpg'
运行上述脚本后,我们将从 URL 中获取文件名。
有关 URL 中内容类型的信息
在通过 GET 请求从 Web 服务器提取内容时,我们还可以检查 Web 服务器提供的信息。 借助以下 Python 脚本,我们可以确定 Web 服务器对内容类型的含义:
首先,我们需要导入必要的 Python 模块,如下所示:
import requests
现在,我们需要提供我们要下载并本地存储的媒体内容的 URL。
url = "https://authoraditiagarwal.com/wpcontent/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg"
以下代码行将创建 HTTP 响应对象。
r = requests.get(url, allow_redirects=True)
现在,我们可以获得 Web 服务器可以提供的关于内容类型的哪些信息。
for headers in r.headers: print(headers)
您可以观察到如下所示的输出:
Date Server Upgrade Connection Last-Modified Accept-Ranges Content-Length Keep-Alive Content-Type
借助以下代码行,我们可以获取有关内容类型的特定信息,例如 content-type:
print (r.headers.get('content-type'))
您可以观察到如下所示的输出:
image/jpeg
借助以下代码行,我们可以获取有关内容类型的特定信息,例如 EType:
print (r.headers.get('ETag'))
您可以观察到如下所示的输出:
None
观察以下命令:
print (r.headers.get('content-length'))
您可以观察到如下所示的输出:
12636
借助以下代码行,我们可以获取有关内容类型的特定信息,例如 Server:
print (r.headers.get('Server'))
您可以观察到如下所示的输出:
Apache
为图像生成缩略图
缩略图是一个非常小的描述或表示。 用户可能只想保存大型图像的缩略图,或者同时保存图像和缩略图。 在本节中,我们将为上一节“从网页获取媒体内容”中下载的名为 **ThinkBig.png** 的图像创建缩略图。
对于此 Python 脚本,我们需要安装名为 Pillow 的 Python 库,它是 Python 图像库的一个分支,具有用于操作图像的有用功能。 它可以使用以下命令安装:
pip install pillow
以下 Python 脚本将创建图像的缩略图,并将其保存到当前目录,并在缩略图文件名前添加 **Th_** 前缀。
import glob from PIL import Image for infile in glob.glob("ThinkBig.png"): img = Image.open(infile) img.thumbnail((128, 128), Image.ANTIALIAS) if infile[0:2] != "Th_": img.save("Th_" + infile, "png")
以上代码非常容易理解,您可以在当前目录中检查缩略图文件。
网站截图
在网络爬虫中,一项非常常见的任务是截取网站的屏幕截图。 为了实现这一点,我们将使用 selenium 和 webdriver。 以下 Python 脚本将截取网站的屏幕截图,并将其保存到当前目录。
From selenium import webdriver path = r'C:\\Users\\gaurav\\Desktop\\Chromedriver' browser = webdriver.Chrome(executable_path = path) browser.get('https://tutorialspoint.com/') screenshot = browser.save_screenshot('screenshot.png') browser.quit
您可以观察到如下所示的输出:
DevTools listening on ws://127.0.0.1:1456/devtools/browser/488ed704-9f1b-44f0- a571-892dc4c90eb7 <bound method WebDriver.quit of <selenium.webdriver.chrome.webdriver.WebDriver (session="37e8e440e2f7807ef41ca7aa20ce7c97")>>
运行脚本后,您可以在当前目录中检查 **screenshot.png** 文件。
视频缩略图生成
假设我们已从网站下载了视频,并希望为其生成缩略图,以便可以根据其缩略图单击特定视频。 为了生成视频的缩略图,我们需要一个名为 **ffmpeg** 的简单工具,可以从 **www.ffmpeg.org** 下载。 下载后,我们需要根据操作系统的规格进行安装。
以下 Python 脚本将生成视频的缩略图,并将其保存到我们的本地目录:
import subprocess video_MP4_file = “C:\Users\gaurav\desktop\solar.mp4 thumbnail_image_file = 'thumbnail_solar_video.jpg' subprocess.call(['ffmpeg', '-i', video_MP4_file, '-ss', '00:00:20.000', '- vframes', '1', thumbnail_image_file, "-y"])
运行上述脚本后,我们将获得一个名为 **thumbnail_solar_video.jpg** 的缩略图,该缩略图保存在我们的本地目录中。
将 MP4 视频提取为 MP3
假设您从网站下载了一些视频文件,但您只需要其中的音频来满足您的目的,那么可以使用 Python 库 **moviepy** 在 Python 中完成此操作,该库可以使用以下命令安装:
pip install moviepy
现在,在使用以下脚本成功安装 moviepy 后,我们可以将 MP4 转换为 MP3。
import moviepy.editor as mp clip = mp.VideoFileClip(r"C:\Users\gaurav\Desktop\1234.mp4") clip.audio.write_audiofile("movie_audio.mp3")
您可以观察到如下所示的输出:
[MoviePy] Writing audio in movie_audio.mp3 100%|¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 674/674 [00:01<00:00, 476.30it/s] [MoviePy] Done.
以上脚本将保存音频 MP3 文件到本地目录。