处理图像和视频

网络抓取通常涉及下载、存储和处理网络图像和视频媒体内容。 在本章中,让我们了解如何处理从网络上下载的内容。


简介

我们在抓取过程中获取的网络媒体内容可以是非网页形式的图片、音频和视频文件,也可以是数据文件。 但是,我们可以信任下载的数据,尤其是我们要下载并存储在计算机内存中的数据扩展吗? 这使得了解我们将在本地存储的数据类型变得至关重要。


从网页获取媒体内容

在本节中,我们将学习如何根据 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 的内容类型的信息

在从Web服务器中提取内容的同时,通过GET请求,我们还可以查看Web服务器提供的其信息。 借助以下 Python 脚本,我们可以确定 Web 服务器对内容类型的含义 −

首先,我们需要导入必要的Python模块如下 −

import requests

现在,我们需要提供要下载并存储在本地的媒体内容的 URL。

url = "https://authoraditiagarwal.com/wpcontent/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg"

Following line of code will create HTTP response object.

r = requests.get(url, allow_redirects=True)

现在,我们可以得到网络服务器可以提供什么类型的内容信息。

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

借助以下代码行,我们可以获得有关内容类型的特定信息,例如服务器 −

print (r.headers.get('Server'))

可以观察到如下图所示的输出 −

Apache

为图像生成缩略图

缩略图是一种非常小的描述或表示。 用户可能只想保存大图像的缩略图或同时保存图像和缩略图。 在本节中,我们将为在上一节"从网页获取媒体内容"中下载的名为 ThinkBig.png 的图像创建缩略图。

对于这个 Python 脚本,我们需要安装名为 Pillow 的 Python 库,它是 Python Image 库的一个分支,具有处理图像的有用功能。 它可以在以下命令的帮助下安装 −

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

假设您已经从网站下载了一些视频文件,但您只需要该文件中的音频来满足您的目的,那么可以借助名为 moviepy 的 Python 库在 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 文件保存在本地目录中。