Web抓取通常涉及下载,存储和处理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 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-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 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://learnfk.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文件保存在本地目录中。
参考链接
https://www.learnfk.com/python-web-scraping/python-web-scraping-processing-images-and-videos.html
标签:缩略图,Python,ThinkBig,无涯,爬虫,URL,import From: https://blog.51cto.com/u_14033984/8620781