Web抓取通常涉及下载,存储和处理Web媒体内容。在本章中,让我们了解如何处理从Web下载的内容。
介绍
我们在抓取过程中获得的Web媒体内容可以是非网页形式的图像,音频和视频文件以及数据文件。但是,我们能否信任下载的数据,尤其是我们将要下载并存储在计算机内存中的数据扩展名?这使得了解我们将要在本地存储的数据类型至关重要。
从网页获取媒体内容
在本节中,我们将学习如何下载基于Web服务器信息正确表示媒体类型的媒体内容。我们可以像上一章一样借助Python 请求模块来做到这一点。
首先,我们需要导入必要的Python模块,如下所示:
import requests
现在,提供我们要在本地下载和存储的媒体内容的URL。
url = ";
使用以下代码创建HTTP响应对象。
r = reque(url)
借助以下代码行,我们可以将收到的内容另存为.png文件。
with open("T;,'wb') as f:
f.write)
运行上述Python脚本之后,我们将获得一个名为T的文件,该文件将具有下载的图像。
从URL提取文件名
从网站上下载内容后,我们还希望将其保存在URL中找到文件名的文件中。但是我们也可以检查URL中是否也存在其他片段。为此,我们需要从URL中找到实际的文件名。
在以下Python脚本的帮助下,使用urlparse,我们可以从URL中提取文件名-
import urllib3
import os
url = ";
a = urlparse(url)
a.path
您可以观察到如下所示的输出-
'/wp-content/uploads/2018/05;
os.)
您可以观察到如下所示的输出-
'Me;
运行上述脚本后,我们将从URL中获取文件名。
URL中有关内容类型的信息
从Web服务器提取内容时,通过GET请求,我们还可以检查Web服务器提供的信息。借助以下Python脚本,我们可以确定Web服务器对内容类型的含义-
首先,我们需要导入必要的Python模块,如下所示:
import requests
现在,我们需要提供要下载并在本地存储的媒体内容的URL。
url = ";
下面的代码行将创建HTTP响应对象。
r = reque(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 ('content-type'))
您可以观察到如下所示的输出-
image/jpeg
在以下代码行的帮助下,我们可以获得有关内容类型的特定信息,例如EType-
print ('ETag'))
您可以观察到如下所示的输出-
None
遵守以下命令-
print ('content-length'))
您可以观察到如下所示的输出-
12636
借助以下代码行,我们可以获得有关内容类型的特定信息,例如Server-
print ('Server'))
您可以观察到如下所示的输出-
Apache
为图像生成缩略图
缩略图是非常小的描述或表示。用户可能只想保存大图像的缩略图,或者既保存图像又保存缩略图。在本节中,我们将创建上一部分“从网页获取媒体内容”中下载的名为T图像的缩略图。
对于此Python脚本,我们需要安装名为Pillow的Python库,该库是Python Image库的一个分支,具有处理图像的有用功能。可以在以下命令的帮助下安装-
pip install pillow
以下Python脚本将创建图像的缩略图,并将缩略图文件添加Th_作为前缀将其保存到当前目录。
import glob
from PIL import Image
for infile in glob.glob("T;):
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)
brow(';)
screenshot = brow(';)
brow
您可以观察到如下所示的输出-
DevTools listening on w
a571-892dc4c90eb7
<bound method WebDriver.quit of <
(session="37e8e440e2f7807ef41ca7aa20ce7c97")>>
运行脚本后,您可以检查当前目录中的文件。
视频缩略图的生成
假设我们已从网站上下载了视频,并希望为其生成缩略图,以便可以单击基于其缩略图的特定视频。为了生成视频缩略图,我们需要一个名为ffmpeg的简单工具,可以从www.下载该工具。下载后,我们需要根据操作系统的规范进行安装。
以下Python脚本将生成视频的缩略图,并将其保存到我们的本地目录-
import subprocess
video_MP4_file = “C:\Users\gaurav\desktop\
thumbnail_image_file = ';
(['ffmpeg', '-i', video_MP4_file, '-ss', '00:00:20.000', '-
vframes', '1', thumbnail_image_file, "-y"])
运行上述脚本后,我们将获得名为的缩略图保存在本地目录中。
将MP4视频复制到MP3
假设您已经从网站上下载了一些视频文件,但是您只需要该文件中的音频即可使用,那么就可以在Python中借助名为moviepy的Python库完成此操作,该库可以通过以下命令进行安装-
pip install moviepy
现在,在以下脚本的帮助下成功安装了moviepy之后,我们可以将MP4转换为MP3。
import movie 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文件保存在本地目录中。