Python 网页抓取处理图像和视频

  • 简述

    网络抓取通常涉及下载、存储和处理网络媒体内容。在本章中,让我们了解如何处理从 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 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"
    
    以下代码行将创建 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-Moove
    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://cainiaoya.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 库在 Python 中完成moviepy可以在以下命令的帮助下安装 -
    
    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 文件保存在本地目录中。