Hướng dẫn từng bước: Cách trích xuất hình ảnh bằng Python

Hướng dẫn , Cách thực hiện , Cạo ,05-09-20245 phút đọc

Trong bài đăng trên blog này, chúng tôi sẽ hướng dẫn bạn quy trình trích xuất hình ảnh từ các trang web bằng Python. Bạn sẽ học cách bắt đầu với các thư viện phổ biến, xử lý các cạm bẫy tiềm ẩn và thậm chí khám phá các kỹ thuật nâng cao để đưa kỹ năng trích xuất hình ảnh từ web của bạn lên một tầm cao mới.

Những điều cơ bản về việc thu thập hình ảnh bằng Python

Để bắt đầu thu thập hình ảnh bằng Python, bạn sẽ cần làm quen với một số thư viện chính giúp công việc này dễ dàng hơn. Các lựa chọn phổ biến nhất là BeautifulSoup, Scrapy và Requests.

BeautifulSoup để trích xuất URL hình ảnh

BeautifulSoup là một thư viện Python được sử dụng để phân tích cú pháp các tài liệu HTML và XML. Nó tạo ra một cây phân tích cú pháp từ các mã nguồn trang có thể được sử dụng để trích xuất dữ liệu dễ dàng.

Sau đây là một ví dụ đơn giản về cách trích xuất URL hình ảnh bằng BeautifulSoup:

Bước 1: Cài đặt BeautifulSoup và Yêu cầu:

 pip cài đặt bs4 yêu cầu

Bước 2: Trích xuất URL hình ảnh:

 nhập yêu cầu từ bs4 nhập BeautifulSoup url = 'https://books.toscrape.com/' phản hồi = yêu cầu. lấy (url) soup = BeautifulSoup(response.text, 'html.parser' ) hình ảnh = soup.find_all( 'img' )

This code fetches the HTML content of the specified URL, parses it with BeautifulSoup, and then finds all the `<img>` tags, printing out their `src` attributes.

Tải xuống hình ảnh bằng Python

Sau khi bạn đã trích xuất URL hình ảnh, bước tiếp theo là tải chúng xuống. Thư viện Requests hoàn hảo cho nhiệm vụ này vì tính đơn giản và dễ sử dụng của nó.

Sử dụng Yêu cầu để Tải xuống Hình ảnh

Sau đây là cách bạn có thể tải xuống hình ảnh bằng Yêu cầu:

Tải hình ảnh từ URL:

for ind, img in enumerate(images):
   img_data = requests.get(url+img['src']).content
   with open(f'image_{ind+1}.jpg', 'wb') as handler:
       handler.write(img_data)

Tập lệnh này gửi yêu cầu GET đến URL hình ảnh và ghi nội dung nhị phân của hình ảnh vào một tệp.

Xử lý lỗi và ngoại lệ

Điều quan trọng là phải xử lý lỗi và ngoại lệ để đảm bảo tập lệnh của bạn chạy trơn tru ngay cả khi có sự cố phát sinh. Sau đây là phiên bản nâng cao của tập lệnh trước:

Xử lý lỗi:

for ind, img in enumerate(images):
   try:
       img_data = requests.get(url+img['src']).content
       with open(f'image_{ind+1}.jpg', 'wb') as handler:
           handler.write(img_data)
   except Exception as e:
       print(f"An error occurred during the extraction of image \n Image Url: {img['src']} \n Error: {e}")

Đoạn mã này bao gồm khối try-except để phát hiện bất kỳ lỗi nào có thể xảy ra trong quá trình tải xuống.

Kỹ thuật tiên tiến để trích xuất hình ảnh

Đối với các tác vụ thu thập dữ liệu phức tạp hơn, chẳng hạn như thu thập nhiều trang hoặc toàn bộ trang web, Scrapy là một thư viện mạnh mẽ có thể xử lý các tình huống này một cách hiệu quả.

Sử dụng Scrapy cho các tác vụ phức tạp

Scrapy là một nền tảng thu thập dữ liệu web mã nguồn mở và cộng tác dành cho Python. Nó được thiết kế để có tốc độ và hiệu quả, lý tưởng cho các dự án thu thập dữ liệu quy mô lớn.

Bước 1: Cài đặt Scrapy:

 pip cài đặt scrapy

Bước 2: Tạo một dự án Scrapy:

 scrapy startproject image_scraper cd image_scraper

Bước 3: Xác định một con nhện:

Tạo một tệp spider (`spiders/image_spider.py`) với nội dung sau:

import scrapy
class ImageSpider(scrapy.Spider):
   name = 'imagespider'
   start_urls = ['https://books.toscrape.com/']
   def parse(self, response):
       # Extract image URLs and convert them to absolute if necessary
       for img in response.css('img::attr(src)').getall():
           abs_img_url = response.urljoin(img)
           yield {'image_url': abs_img_url}
      
       # Find the link to the next page and create a request for it
       next_page = response.css('a.next::attr(href)').get()
       if next_page is not None:
           next_page_url = response.urljoin(next_page)
           yield response.follow(next_page_url, self.parse)

Công cụ thu thập dữ liệu Scrapy đơn giản này bắt đầu từ URL đã cho, trích xuất tất cả URL hình ảnh và theo dõi các liên kết trang tiếp theo để tiếp tục thu thập dữ liệu.

Cải thiện các dự án thu thập hình ảnh của bạn

Để cải thiện hơn nữa các dự án thu thập dữ liệu của bạn, hãy cân nhắc sử dụng API để truy cập hình ảnh chất lượng cao và tự động hóa các tác vụ để tăng hiệu quả.

Sử dụng API để thu thập hình ảnh

API cung cấp một cách đáng tin cậy và hợp pháp để truy cập hình ảnh. Nhiều trang web cung cấp API cho phép bạn tìm kiếm và tải xuống hình ảnh theo chương trình. Một trong những trang web này là Unsplash AP I.

Ví dụ với Unsplash API:

import requests
# Replace 'YOUR_ACCESS_KEY' with your actual Unsplash Access Key
api_url = "https://api.unsplash.com/photos/random"
headers = {"Authorization": "Client-ID YOUR_ACCESS_KEY"}
params = {"query": "nature"}
try:
   response = requests.get(api_url, headers=headers, params=params)
   response.raise_for_status()  # This will raise an exception for HTTP errors
   data = response.json()
   image_url = data['urls']['full']
   print(image_url)
except requests.exceptions.HTTPError as err:
   print(f"HTTP error occurred: {err}")
except Exception as err:
   print(f"An error occurred: {err}")

Tập lệnh này sử dụng API Unsplash để lấy một hình ảnh thiên nhiên ngẫu nhiên.

Tự động hóa các tác vụ thu thập hình ảnh

Tự động hóa tiết kiệm thời gian và đảm bảo các tác vụ thu thập dữ liệu của bạn chạy trơn tru mà không cần can thiệp thủ công. Các công cụ như cron jobs trên hệ thống Unix hoặc Task Scheduler trên Windows có thể lên lịch cho các tập lệnh của bạn chạy theo các khoảng thời gian đều đặn.

Công việc Cron trên hệ thống Unix - Crontab:

Crontab là một tiện ích mạnh mẽ trong các hệ điều hành giống Unix để lập lịch các tác vụ, được gọi là " cron jobs " để chạy tự động vào những thời điểm cụ thể. Hãy cùng xem cách chúng ta có thể lập lịch một tác vụ bằng Crontab.

Hiểu cú pháp Crontab:

Một tệp crontab bao gồm các dòng lệnh, trong đó mỗi dòng đại diện cho một công việc riêng biệt. Cú pháp như sau:

PHÚT GIỜ DOM THỨ HAI DOW CMD
  • MIN: Trường phút (0 đến 59)
  • GIỜ: Trường giờ (0 đến 23)
  • DOM : Ngày trong tháng (1 đến 31)
  • MON: Trường tháng (1 đến 12)
  • DOW: Ngày trong tuần (0 đến 7 trong đó 0 và 7 biểu thị Chủ Nhật)
  • CMD: Lệnh chạy (trong trường hợp này sẽ là lệnh thực thi tập lệnh python của bạn)

Đây là một ví dụ về việc chạy một tập lệnh python hàng ngày lúc 8:00PM

0 20 * * * / usr /bin/python3 /path/ đến /Image_Scraper.py

Sử dụng Task Scheduler (Windows):

  • Mở Task Scheduler (Sử dụng thanh tìm kiếm trên Windows và tìm kiếm "Task Scheduler")
  • Nhấp vào " Tạo tác vụ cơ bản "
  • Cung cấp tên và mô tả và nhấp vào " Tiếp theo "
  • Chọn mức độ chi tiết hoặc khoảng thời gian bạn cần để chạy tác vụ này và nhấp vào " Tiếp theo "
  • Bây giờ hãy đảm bảo rằng " Bắt đầu một chương trình " đã được chọn và nhấp vào " Tiếp theo ".
  • Cung cấp đường dẫn đến tập lệnh python của bạn bằng cách nhấp vào " Duyệt ". Tùy chọn nếu bạn phải cung cấp bất kỳ đối số nào cho tập lệnh python của mình, bạn có thể thực hiện bằng cách thêm chúng vào trường " Thêm đối số " và nhấp vào " Tiếp theo ".
  • Bước cuối cùng, bạn chỉ cần nhấp vào " Hoàn tất " và thế là tác vụ này đã sẵn sàng chạy trong khoảng thời gian đã chỉ định.

Phần kết luận

Trong bài đăng trên blog này, chúng tôi đã khám phá cách thu thập hình ảnh từ các trang web bằng Python. Chúng tôi đã đề cập đến những điều cơ bản với BeautifulSoup và Requests, các kỹ thuật nâng cao với Scrapy và các hoạt động thu thập dữ liệu có đạo đức. Ngoài ra, chúng tôi đã thảo luận về cách nâng cao các dự án thu thập dữ liệu của bạn bằng API và các công cụ tự động hóa như Windows Task Scheduler.

Thu thập hình ảnh là một kỹ năng mạnh mẽ có thể nâng cao khả năng thu thập dữ liệu của bạn và mở ra những khả năng mới cho các dự án của bạn.

Chúc bạn cạo vui vẻ!