Viết phần mềm tải file ảnh trong link URL được nhập bằng python
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.
Nội dung
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
- 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.
- Chọn phiên bản Python: Trên trang chủ, bạn sẽ thấy nút “Download”, nhấp vào đó.
- 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
- 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. - 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.
- 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
- Mở Command Prompt (CMD): Bạn có thể mở CMD bằng cách nhấn
Windows + R
, gõcmd
, và nhấn Enter. - Kiểm tra phiên bản Python: Trong cửa sổ Command Prompt, gõ
python --version
hoặcpython3 --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.
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
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
pyinstaller --onefile taihinh.py
Và đây là demo chạy thử.
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
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
Trải nghiệm thôi.