Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Hướng dẫn Web Scraping tự động tải hình ảnh với Python
Trong bài hướng dẫn này, mình sẽ học cách xây dựng một chương trình tải hình ảnh từ Google Images bằng Python. Bài học sử dụng thư viện BeautifulSoup và requests để thực hiện web scraping, cho phép bạn tự động tìm và tải về hình ảnh từ các từ khóa được nhập vào.

Lưu ý quan trọng
Mặc dù mã nguồn bên dưới là một ví dụ cơ bản, Google đã thay đổi cách cấu trúc HTML của trang Google Images, do đó mã này có thể không hoạt động trực tiếp. Tuy nhiên, bạn sẽ có cái nhìn rõ hơn về các nguyên tắc cơ bản khi làm việc với web scraping bằng Python.

Cách xây dựng một chương trình tải hình ảnh từ Google Images bằng Python
import os
import json
import requests  # Thư viện để gửi yêu cầu GET
from bs4 import BeautifulSoup  # Thư viện phân tích cú pháp HTML
# URL Google Image Search
GOOGLE_IMAGE = \
    'https://www.google.com/search?site=&tbm=isch&source=hp&biw=1873&bih=990&'
# Header để tránh bị từ chối bởi Google
usr_agent = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
    'Accept-Encoding': 'none',
    'Accept-Language': 'en-US,en;q=0.8',
    'Connection': 'keep-alive',
}
# Thư mục lưu hình ảnh
SAVE_FOLDER = 'images'
def main():
    # Tạo thư mục lưu ảnh nếu chưa có
    if not os.path.exists(SAVE_FOLDER):
        os.mkdir(SAVE_FOLDER)
    download_images()
def download_images():
    # Yêu cầu người dùng nhập từ khóa và số lượng ảnh cần tải
    data = input('Bạn muốn tìm gì? ')
    n_images = int(input('Bạn muốn tải bao nhiêu ảnh? '))
    print('Đang tìm kiếm...')
    # Tạo URL tìm kiếm
    searchurl = GOOGLE_IMAGE + 'q=' + data
    print(f'URL tìm kiếm: {searchurl}')
    # Gửi yêu cầu GET với User-Agent
    response = requests.get(searchurl, headers=usr_agent)
    html = response.text
    # Phân tích cú pháp HTML
    soup = BeautifulSoup(html, 'html.parser')
    # Tìm tất cả các thẻ <div> chứa hình ảnh
    results = soup.findAll('div', {'class': 'rg_meta'}, limit=n_images)
    # Trích xuất link từ JSON
    imagelinks = []
    for re in results:
        text = re.text  # Dữ liệu ở dạng chuỗi JSON
        text_dict = json.loads(text)  # Chuyển đổi JSON thành dictionary Python
        link = text_dict['ou']  # Lấy link ảnh
        imagelinks.append(link)
    print(f'Tìm thấy {len(imagelinks)} hình ảnh.')
    print('Bắt đầu tải...')
    # Tải hình ảnh và lưu vào thư mục
    for i, imagelink in enumerate(imagelinks):
        response = requests.get(imagelink)
        imagename = os.path.join(SAVE_FOLDER, f'{data}_{i + 1}.jpg')
        with open(imagename, 'wb') as file:
            file.write(response.content)
    print('Hoàn tất tải hình ảnh!')
if __name__ == '__main__':
    main()
Giải thích mã nguồn
Bài viết này được đăng tại [free tuts .net]
Thư viện requests:
- Dùng để gửi yêu cầu HTTP đến trang web.
 - Cần kèm User-Agent để tránh bị Google từ chối yêu cầu.
 
Thư viện BeautifulSoup:
- Phân tích cú pháp HTML để dễ dàng lấy các thẻ HTML mong muốn.
 - Dùng phương thức 
findAllđể tìm các phần tửdivchứa liên kết ảnh. 
Tách Dữ Liệu Từ JSON:
- Thẻ 
<div>chứa liên kết hình ảnh ở dạng JSON trong thuộc tínhrg_meta. - Chuyển JSON thành dictionary để lấy liên kết ảnh.
 
Lưu Hình Ảnh:
- Mỗi ảnh được tải về với tên độc đáo và lưu trong thư mục 
images. 
Cách chạy chương trình
Cài Đặt Các Thư Viện Cần Thiết:
pip install requests beautifulsoup4
Chạy Chương Trình:
python download_images.py
- 
	
Nhập từ khóa tìm kiếm và số lượng ảnh cần tải khi được yêu cầu.
 
Hạn Chế
- Google thường xuyên thay đổi cách cấu trúc HTML, mã này có thể không hoạt động nếu HTML không còn khớp.
 - Nên sử dụng API chính thức (như Google Custom Search) để tải ảnh một cách bền vững và tuân thủ chính sách.
 
Kết bài
Việc tự động tải hình ảnh bằng Python thông qua web scraping là một trải nghiệm thú vị và giúp bạn hiểu hơn về cách hoạt động của các công cụ như BeautifulSoup và requests. Tuy nhiên, để đảm bảo tính bền vững và tuân thủ chính sách từ các nền tảng lớn như Google, việc sử dụng API chính thức là lựa chọn an toàn và đáng tin cậy hơn.
Ngoài ra, bạn có thể phát triển chương trình hơn nữa bằng cách xử lý các trường hợp lỗi, như không tải được ảnh do liên kết hỏng, hoặc thêm các tính năng như giao diện người dùng để thao tác dễ dàng hơn, hỗ trợ tải ảnh từ nhiều từ khóa cùng lúc.
Hy vọng hướng dẫn này đã cung cấp cho bạn nền tảng vững chắc để bước đầu khám phá web scraping với Python. Chúc bạn lập trình vui vẻ và thành công!

            Các kiểu dữ liệu trong C ( int - float - double - char ...)        
            Thuật toán tìm ước chung lớn nhất trong C/C++        
            Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)        
            ComboBox - ListBox trong lập trình C# winforms        
            Random trong Python: Tạo số random ngẫu nhiên        
            Lệnh cin và cout trong C++        
                Cách khai báo biến trong PHP, các loại biến thường gặp            
                Download và cài đặt Vertrigo Server            
                Thẻ li trong HTML            
                Thẻ article trong HTML5            
                Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên            
                Cách dùng thẻ img trong HTML và các thuộc tính của img            
                Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng