Viết phần mềm tải file ảnh trong link URL được nhập bằng python

Python Giza Data Tháng mười một 22, 2023

Chức năng tải hình từ URL là một tính năng trong lập trình cho phép người dùng nhập một đường dẫn URL của một trang web chứa các hình ảnh, sau đó chương trình sẽ quét trang web đó và tải xuống tất cả các hình ảnh có trên trang đó về máy tính của người dùng.

Chức năng này thường được sử dụng trong các ứng dụng hoặc script Python để tự động tải hình ảnh từ các trang web hoặc từ một số nguồn dữ liệu trực tuyến. Bằng cách nhập một URL cụ thể, người dùng có thể dễ dàng lấy về các hình ảnh từ trang web một cách tự động, tiết kiệm thời gian so với việc tải từng hình một thủ công.

Chức năng này thường cung cấp tính linh hoạt và thuận tiện, giúp người dùng tiết kiệm công sức khi cần thu thập các hình ảnh từ internet để sử dụng cho mục đích cá nhân hoặc công việc.

Cài đặt python

Để cài đặt Python trên Windows, bạn có thể làm theo các bước sau:

Bước 1: Tải xuống Python

  1. Truy cập trang web chính thức của Python: Điều này có thể thực hiện tại python.org.
  2. Chọn phiên bản Python: Trên trang chủ, bạn sẽ thấy nút “Download”, nhấp vào đó.
  3. Chọn phiên bản Python: Python thường có hai phiên bản: Python 3.x (3.7, 3.8, 3.9,…) và Python 2.x (2.7). Mặc định, hãy chọn phiên bản Python 3.x để tận dụng các cải tiến và sự hỗ trợ từ cộng đồng. Nhấp vào phiên bản mà bạn muốn tải xuống.

Bước 2: Cài đặt Python

  1. Chạy tệp tin tải xuống: Một tệp tin cài đặt sẽ được tải xuống. Mở tệp tin cài đặt đó (có thể có tên như python-3.x.x.exe) để bắt đầu quá trình cài đặt.
  2. Bật lựa chọn “Add Python 3.x to PATH”: Đảm bảo bạn chọn tùy chọn này trước khi cài đặt Python. Tùy chọn này sẽ tự động thêm Python vào biến môi trường PATH của bạn, giúp bạn có thể sử dụng Python từ bất kỳ vị trí nào trên máy tính.
  3. Tiến hành cài đặt: Nhấn nút “Install Now” và sau đó chờ đợi quá trình cài đặt hoàn tất.

Bước 3: Kiểm tra cài đặt

  1. Mở Command Prompt (CMD): Bạn có thể mở CMD bằng cách nhấn Windows + R, gõ cmd, và nhấn Enter.
  2. Kiểm tra phiên bản Python: Trong cửa sổ Command Prompt, gõ python --version hoặc python3 --version và nhấn Enter. Nếu Python đã được cài đặt thành công, bạn sẽ thấy phiên bản Python hiển thị trên màn hình.

Sau khi cài đặt Python thành công, bạn có thể sử dụng Python bằng cách gõ python hoặc python3 trong Command Prompt để mở Python Interpreter và bắt đầu viết mã Python.

Viết code python

Code dưới đây có chức năng sau:

  • Nhập link cần tải hình.
  • Check link đúng định dạng hay chưa.
  • Quét các định dạng hình trong link rồi tải xuống.
  • Thống kê số hình đã tải và dung lượng.
ShellScript
import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urlparse, urljoin

def download_images(url):
    # Kiểm tra định dạng link nhập vào
    if not url.startswith(('http://', 'https://')):
        print("Định dạng link không hợp lệ. Vui lòng nhập link bắt đầu bằng 'http://' hoặc 'https://'")
        return

    # Tạo thư mục nếu chưa tồn tại
    folder_name = 'taihinh'
    if not os.path.exists(folder_name):
        os.makedirs(folder_name)

    # Lấy nội dung của trang web
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')

    # Tạo biến để thống kê số lượng hình và tổng dung lượng
    count_images = 0
    total_size = 0

    # Tìm và tải hình ảnh từ thẻ img
    img_tags = soup.find_all('img')
    for img_tag in img_tags:
        img_url = img_tag.get('src')
        if img_url:
            img_url = urljoin(url, img_url)
            count_images, total_size = download_image(url, img_url, folder_name, count_images, total_size)

    # Tìm và tải hình ảnh từ thẻ a
    a_tags = soup.find_all('a')
    for a_tag in a_tags:
        img_url = a_tag.get('href')
        if img_url.lower().endswith(('.png', '.jpg', '.jpeg', '.gif')):
            img_url = urljoin(url, img_url)
            count_images, total_size = download_image(url, img_url, folder_name, count_images, total_size)

    # Hiển thị thông tin sau khi đã tải xong
    print(f"-----------------")
    print(f"Đã tải xuống {count_images} hình ảnh.")
    print(f"Tổng dung lượng: {total_size / (1024 * 1024):.2f} MB")
    print(f"Phần mềm tải hình được phát triển bởi GizaData.vn")
    print(f"-----------------")

def download_image(base_url, img_url, folder_name, count_images, total_size):
    img_name = os.path.basename(urlparse(img_url).path)
    img_path = os.path.join(folder_name, img_name)

    # Kiểm tra xem hình đã được tải trước đó chưa
    if not os.path.exists(img_path):
        # Tải hình ảnh xuống thư mục
        with open(img_path, 'wb') as img_file:
            img_response = requests.get(img_url)
            img_file.write(img_response.content)
            print(f"Tải xuống {img_url} thành công!")
            
            # Cập nhật số lượng hình và tổng dung lượng
            count_images += 1
            total_size += len(img_response.content)

    return count_images, total_size

def main():
    while True:
        link = input("Nhập link cần tải hình ảnh : ")
        if link.lower() == 'q':
            break
        download_images(link)

if __name__ == "__main__":
    main()

Để sử dụng chương trình, bạn cần cài đặt các thư viện sau

ShellScript
pip install beautifulsoup4
pip install pyinstaller
pip install requests

Sau đó, bạn có thể tạo một tệp tin Python với nội dung trên và chạy nó. Nhập đường link mà bạn muốn quét hình ảnh và tải về, chương trình sẽ tạo thư mục “taihinh” và lưu các hình ảnh tìm thấy từ đường link vào thư mục đó.

Tạo file taihinh.exe từ file taihinh.py

Bạn cd tới thư mục chứ file taihinh.py sau đó chạy lệnh

ShellScript
pyinstaller --onefile taihinh.py

Và đây là demo chạy thử.

Viet phan mem image JUSn du4P - Giza Network - Gizadigi

Phương án bổ sung, tự tạo zip sau khi quá trình tải file hoàn tất

Đây là code cho chức năng này

ShellScript
import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urlparse, urljoin
import zipfile
import datetime
import random
import string

def download_images(url):
    # Kiểm tra định dạng link nhập vào
    if not url.startswith(('http://', 'https://')):
        print("Định dạng link không hợp lệ. Vui lòng nhập link bắt đầu bằng 'http://' hoặc 'https://'")
        return

    # Tạo thư mục nếu chưa tồn tại
    folder_name = 'taihinh'
    if not os.path.exists(folder_name):
        os.makedirs(folder_name)

    # Lưu trữ các URL đã tải xuống
    downloaded_urls = set()

    # Lấy nội dung của trang web
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')

    # Tạo biến để thống kê số lượng hình và tổng dung lượng
    count_images = 0
    total_size = 0

    # Tìm và tải hình ảnh từ thẻ img và a
    img_tags = soup.find_all(['img', 'a'])
    for tag in img_tags:
        if tag.name == 'img':
            img_url = tag.get('src')
        elif tag.name == 'a':
            img_url = tag.get('href')

        if img_url and (img_url.lower().endswith(('.png', '.jpg', '.jpeg', '.gif'))) and img_url not in downloaded_urls:
            img_url = urljoin(url, img_url)
            img_name = os.path.basename(urlparse(img_url).path)
            img_path = os.path.join(folder_name, img_name)

            # Tải hình ảnh xuống thư mục
            with open(img_path, 'wb') as img_file:
                img_response = requests.get(img_url)
                img_file.write(img_response.content)
                print(f"Tải xuống {img_url} thành công!")
                
                # Cập nhật số lượng hình và tổng dung lượng
                count_images += 1
                total_size += len(img_response.content)

                # Thêm URL đã tải vào danh sách
                downloaded_urls.add(img_url)

    # Nén các hình ảnh đã tải vào tệp tin zip
    zip_file_name = create_zip_file(downloaded_urls)

    # Hiển thị thông tin sau khi đã tải xong và tạo file zip
    print(f"-----------------")
    print(f"Đã tải xuống {count_images} hình ảnh.")
    print(f"Tổng dung lượng: {total_size / (1024 * 1024):.2f} MB")
    print(f"File zip được tạo: {zip_file_name}")
    print(f"Phần mềm tải ảnh được phát triển bởi Gizadata.vn")
    print(f"-----------------")

def create_zip_file(downloaded_urls):
    if downloaded_urls:
        # Tạo tên file zip dựa trên ngày tháng năm
        current_time = datetime.datetime.now().strftime("%d-%m-%Y")
        
        # Tạo chuỗi ngẫu nhiên gồm 5 ký tự
        random_suffix = ''.join(random.choices(string.ascii_lowercase + string.digits, k=5))
        
        # Tạo tên file zip với ngày tháng năm và 5 ký tự ngẫu nhiên
        zip_file_name = f"{current_time}-{random_suffix}.zip"

        # Nén các hình ảnh đã tải vào file zip
        with zipfile.ZipFile(zip_file_name, 'w') as zipf:
            for url in downloaded_urls:
                img_name = os.path.basename(urlparse(url).path)
                img_path = os.path.join('taihinh', img_name)
                zipf.write(img_path, arcname=img_name)

        return zip_file_name

def main():
    while True:
        link = input("Nhập link cần tải hình ảnh : ")
        if link.lower() == 'q':
            break
        download_images(link)

if __name__ == "__main__":
    main()

Hình demo

Viet phan mem image lcRv 2O27 - Giza Network - Gizadigi

Trải nghiệm thôi.

Quảng Cáo