Web抓取通常涉及下载,存储和处理Web媒体内容.在本章中,让我们了解如何处理从网上下载的内容.
简介
我们在抓取过程中获得的网络媒体内容可以是非网页形式的图像,音频和视频文件以及数据文件.但是,我们能否相信下载的数据,尤其是我们要下载并存储在计算机内存中的数据扩展?这使我们必须了解我们将在本地存储的数据类型.
从网页获取媒体内容
在本节中,我们将学习如何根据来自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 urllib3import osurl = "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 ="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)
你可以观察输出如下所示 :
DateServerUpgradeConnectionLast-ModifiedAccept-RangesContent-LengthKeep-AliveContent-Type
借助以下代码行,我们可以获得有关内容类型的特定信息,比如content-type :
print(r.headers.get('content-type'))
你可以观察输出如下所示 :
image/jpeg
With在下面的代码行的帮助下,我们可以获得有关内容类型的特定信息,比如EType :
print(r.headers.get ('ETag'))
您可以观察输出如下所示 :
无
观察以下命令 :
print(r.headers.get('content-length'))
您可以观察输出如下所示 :
12636
借助以下代码行,我们可以获得有关内容类型的特定信息,例如服务器和减号;
print(r.headers.get('Server'))
您可以观察输出,如下所示 :
Apache
为图像生成缩略图
缩略图是一种非常小的描述或表示.用户可能想要仅保存大图像的缩略图或保存图像以及缩略图.在本节中,我们将创建在上一节"从网页获取媒体内容"中下载的名为 ThinkBig.png 的图像的缩略图.
For在这个Python脚本中,我们需要安装名为Pillow的Python库,它是Python Image库的一个分支,具有操作图像的有用功能.它可以在以下命令和减号的帮助下安装;
pip install pillow
以下Python脚本将创建图像的缩略图,并通过在缩略图文件前加上 Th _
import globfrom PIL import Imagefor 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 webdriverpath = r'C:\\Users\\gaurav\\Desktop\\Chromedriver'browser = webdriver.Chrome(executable_path = path)browser.get('https://IT屋.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>
运行脚本后,您可以检查 screenshot.png 文件的当前目录.
视频缩略图生成
假设我们已下载来自网站的视频,并希望为他们生成缩略图,以便可以点击基于其缩略图的特定视频.为了生成视频缩略图,我们需要一个名为 ffmpeg 的简单工具,可以从 www.ffmpeg.org 下载.下载后,我们需要按照操作系统的规格进行安装.
以下Python脚本将生成视频的缩略图,并将其保存到我们的本地目录 :
import subprocessvideo_MP4_file = "C:\Users\gaurav\desktop\solar.mp4thumbnail_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 ,可以安装wi以下命令和减号的帮助;
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.mp3100%|¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 674/674 [00:01<00:00,476.30it/s][MoviePy] Done.
以上脚本会将音频MP3文件保存在本地目录中.