Xử lý hình ảnh và video

Việc tìm kiếm trên web thường liên quan đến việc tải xuống, lưu trữ và xử lý nội dung phương tiện web. Trong chương này, chúng ta hãy hiểu cách xử lý nội dung được tải xuống từ web.

Giới thiệu

Nội dung phương tiện web mà chúng tôi thu được trong quá trình thu thập dữ liệu có thể là hình ảnh, tệp âm thanh và video, ở dạng không phải trang web cũng như tệp dữ liệu. Tuy nhiên, liệu chúng ta có thể tin tưởng vào dữ liệu đã tải xuống, đặc biệt là trên phần mở rộng của dữ liệu mà chúng ta sẽ tải xuống và lưu trữ trong bộ nhớ máy tính của mình không? Điều này làm cho nó trở nên cần thiết để biết về loại dữ liệu mà chúng tôi sẽ lưu trữ cục bộ.

Lấy nội dung đa phương tiện từ trang web

Trong phần này, chúng ta sẽ tìm hiểu cách chúng ta có thể tải xuống nội dung phương tiện thể hiện chính xác loại phương tiện dựa trên thông tin từ máy chủ web. Chúng tôi có thể làm điều đó với sự trợ giúp của Pythonrequests như chúng ta đã làm trong chương trước.

Đầu tiên, chúng ta cần nhập các mô-đun Python cần thiết như sau:

import requests

Bây giờ, hãy cung cấp URL của nội dung phương tiện mà chúng tôi muốn tải xuống và lưu trữ cục bộ.

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

Sử dụng mã sau để tạo đối tượng phản hồi HTTP.

r = requests.get(url)

Với sự trợ giúp của dòng mã sau, chúng tôi có thể lưu nội dung nhận được dưới dạng tệp .png.

with open("ThinkBig.png",'wb') as f:
   f.write(r.content)

Sau khi chạy tập lệnh Python ở trên, chúng ta sẽ nhận được một tệp có tên ThinkBig.png, tệp này sẽ có hình ảnh được tải xuống.

Trích xuất tên tệp từ URL

Sau khi tải xuống nội dung từ trang web, chúng tôi cũng muốn lưu nó vào một tệp có tên tệp được tìm thấy trong URL. Nhưng chúng tôi cũng có thể kiểm tra xem có số lượng đoạn bổ sung tồn tại trong URL hay không. Đối với điều này, chúng tôi cần tìm tên tệp thực tế từ URL.

Với sự trợ giúp của tập lệnh Python sau, sử dụng urlparse, chúng tôi có thể trích xuất tên tệp từ URL -

import urllib3
import os
url = "https://authoraditiagarwal.com/wpcontent/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg"
a = urlparse(url)
a.path

Bạn có thể quan sát đầu ra như hình dưới đây:

'/wp-content/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg'
os.path.basename(a.path)

Bạn có thể quan sát đầu ra như hình dưới đây:

'MetaSlider_ThinkBig-1080x180.jpg'

Khi bạn chạy tập lệnh trên, chúng tôi sẽ nhận được tên tệp từ URL.

Thông tin về Loại nội dung từ URL

Trong khi trích xuất nội dung từ máy chủ web, theo yêu cầu GET, chúng tôi cũng có thể kiểm tra thông tin do máy chủ web cung cấp. Với sự trợ giúp của tập lệnh Python sau, chúng tôi có thể xác định máy chủ web có ý nghĩa gì với loại nội dung -

Đầu tiên, chúng ta cần nhập các mô-đun Python cần thiết như sau:

import requests

Bây giờ, chúng tôi cần cung cấp URL của nội dung phương tiện mà chúng tôi muốn tải xuống và lưu trữ cục bộ.

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

Dòng mã sau sẽ tạo đối tượng phản hồi HTTP.

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

Bây giờ, chúng ta có thể nhận được loại thông tin về nội dung có thể được cung cấp bởi máy chủ web.

for headers in r.headers: print(headers)

Bạn có thể quan sát đầu ra như hình dưới đây:

Date
Server
Upgrade
Connection
Last-Modified
Accept-Ranges
Content-Length
Keep-Alive
Content-Type

Với sự trợ giúp của dòng mã sau, chúng tôi có thể nhận được thông tin cụ thể về loại nội dung, chẳng hạn như loại nội dung -

print (r.headers.get('content-type'))

Bạn có thể quan sát đầu ra như hình dưới đây:

image/jpeg

Với sự trợ giúp của dòng mã sau, chúng tôi có thể nhận được thông tin cụ thể về loại nội dung, chẳng hạn như EType -

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

Bạn có thể quan sát đầu ra như hình dưới đây:

None

Tuân theo lệnh sau -

print (r.headers.get('content-length'))

Bạn có thể quan sát đầu ra như hình dưới đây:

12636

Với sự trợ giúp của dòng mã sau, chúng tôi có thể nhận được thông tin cụ thể về loại nội dung, chẳng hạn như Máy chủ -

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

Bạn có thể quan sát đầu ra như hình dưới đây:

Apache

Tạo hình thu nhỏ cho hình ảnh

Hình thu nhỏ là một mô tả hoặc đại diện rất nhỏ. Người dùng có thể chỉ muốn lưu hình thu nhỏ của một hình ảnh lớn hoặc lưu cả hình ảnh đó cũng như hình thu nhỏ. Trong phần này, chúng ta sẽ tạo một hình thu nhỏ của hình ảnh có tênThinkBig.png đã tải xuống trong phần trước “Lấy nội dung đa phương tiện từ trang web”.

Đối với tập lệnh Python này, chúng ta cần cài đặt thư viện Python có tên là Pillow, một nhánh của thư viện Python Image có các chức năng hữu ích để xử lý hình ảnh. Nó có thể được cài đặt với sự trợ giúp của lệnh sau:

pip install pillow

Tập lệnh Python sau sẽ tạo một hình thu nhỏ của hình ảnh và sẽ lưu nó vào thư mục hiện tại bằng cách đặt tiền tố tệp hình thu nhỏ bằng 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")

Đoạn mã trên rất dễ hiểu và bạn có thể kiểm tra tệp hình thu nhỏ trong thư mục hiện tại.

Ảnh chụp màn hình từ Trang web

Trong thao tác tìm kiếm trên web, một nhiệm vụ rất phổ biến là chụp ảnh màn hình của một trang web. Để thực hiện điều này, chúng tôi sẽ sử dụng selen và webdriver. Tập lệnh Python sau sẽ chụp ảnh màn hình từ trang web và sẽ lưu nó vào thư mục hiện tại.

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

Bạn có thể quan sát đầu ra như hình dưới đây:

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")>>

Sau khi chạy tập lệnh, bạn có thể kiểm tra thư mục hiện tại của mình cho screenshot.png tập tin.

Tạo hình thu nhỏ cho video

Giả sử chúng tôi đã tải xuống video từ trang web và muốn tạo hình thu nhỏ cho chúng để có thể nhấp vào một video cụ thể, dựa trên hình thu nhỏ của nó. Để tạo hình thu nhỏ cho video, chúng tôi cần một công cụ đơn giản có tênffmpeg có thể tải xuống từ www.ffmpeg.org. Sau khi tải xuống, chúng tôi cần cài đặt nó theo thông số kỹ thuật của hệ điều hành của chúng tôi.

Tập lệnh Python sau sẽ tạo hình thu nhỏ của video và sẽ lưu nó vào thư mục cục bộ của chúng tôi -

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"])

Sau khi chạy tập lệnh trên, chúng ta sẽ nhận được hình thu nhỏ có tên thumbnail_solar_video.jpg được lưu trong thư mục cục bộ của chúng tôi.

Ripping video MP4 thành MP3

Giả sử bạn đã tải xuống một số tệp video từ một trang web, nhưng bạn chỉ cần âm thanh từ tệp đó để phục vụ mục đích của mình, thì nó có thể được thực hiện bằng Python với sự trợ giúp của thư viện Python có tên moviepy có thể được cài đặt với sự trợ giúp của lệnh sau:

pip install moviepy

Bây giờ, sau khi cài đặt thành công phimepy với sự trợ giúp của tập lệnh sau, chúng ta có thể chuyển đổi MP4 sang MP3.

import moviepy.editor as mp
clip = mp.VideoFileClip(r"C:\Users\gaurav\Desktop\1234.mp4")
clip.audio.write_audiofile("movie_audio.mp3")

Bạn có thể quan sát đầu ra như hình dưới đây:

[MoviePy] Writing audio in movie_audio.mp3
100%|¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 674/674 [00:01<00:00,
476.30it/s]
[MoviePy] Done.

Tập lệnh trên sẽ lưu tệp MP3 âm thanh trong thư mục cục bộ.