Lưu nhiều hình ảnh python
Tự động tải xuống hình ảnh từ một số trang HTML của bạn là một kỹ năng cần thiết, trong hướng dẫn này, bạn sẽ học 4 phương pháp về cách tải xuống hình ảnh bằng Python Show
Hãy bắt đầu với ví dụ đơn giản nhất, nếu chúng ta đã có danh sách các URL hình ảnh thì chúng ta có thể làm theo quy trình này
Nhập khẩu Python ____1
Thay đổi vào thư mục của thư mục có tên all_images, điều này có thể được thực hiện bởi một trong hai
phương pháp một. Cách tải xuống nhiều hình ảnh từ danh sách PythonĐể tải xuống nhiều hình ảnh, chúng tôi sẽ sử dụng thư viện yêu cầu. Chúng tôi cũng sẽ tạo một danh sách python để lưu trữ bất kỳ URL hình ảnh bị hỏng nào không trả về mã trạng thái 200 ____9 0 1☝️ Thấy sao mà đơn giản thế. ☝️ Nếu bạn kiểm tra thư mục của mình, bây giờ bạn sẽ tải xuống tất cả các hình ảnh có chứa mã trạng thái 200 Phương pháp hai. Cách tải xuống nhiều hình ảnh từ nhiều trang web HTMLNếu chúng tôi chưa có URL hình ảnh chính xác, chúng tôi sẽ cần thực hiện các thao tác sau
Trang web này internetingishard. com có một số URL hình ảnh tương đối. Do đó, chúng tôi sẽ cần đảm bảo rằng mã của chúng tôi có thể xử lý hai loại URL nguồn hình ảnh sau
2Chúng tôi cũng sẽ trích xuất tên miền của mọi URL trong khi chúng tôi duyệt qua các trang web như vậy 3____14 5 6Bây giờ, hãy kiểm tra lại và lọc từ điển của chúng tôi để chúng tôi chỉ xem các trang web có ít nhất 1 thẻ hình ảnh 7____18Một cách dễ dàng hơn để viết đoạn mã trên là thông qua việc hiểu từ điển 9Giờ đây, chúng tôi có thể xóa tất cả các URL hình ảnh bên trong mọi khóa từ điển và thay đổi tất cả các đường dẫn URL tương đối thành các đường dẫn URL chính xác Hãy bắt đầu bằng cách in ra tất cả các nguồn hình ảnh khác nhau để xem chúng ta có thể cần làm sạch dữ liệu bên dưới như thế nào 0Đối với phạm vi của hướng dẫn này, tôi đã quyết định
1 2____23Sau khi làm sạch các URL hình ảnh, bây giờ chúng ta có thể tham khảo phương pháp một để tải hình ảnh về máy tính của mình Lần này hãy chuyển đổi nó thành một chức năng 4
6Tuyệt vời Bây giờ có một số điều mà chúng tôi không nhất thiết phải bảo hiểm bao gồm
Nhưng phần lớn, bạn sẽ có thể tải xuống hàng loạt hình ảnh Cách tăng tốc độ tải xuống hình ảnh của bạnKhi làm việc với 100 hoặc 1000 URL, điều quan trọng là tránh sử dụng phương pháp đồng bộ để tải xuống hình ảnh. Cách tiếp cận không đồng bộ có nghĩa là chúng tôi có thể tải xuống nhiều trang web hoặc nhiều hình ảnh song song Điều này có nghĩa là thời gian thực hiện tổng thể sẽ nhanh hơn nhiều ThreadPoolExecutor()ThreadPoolExecutor là một trong các gói I/O tích hợp sẵn của python để tạo hành vi không đồng bộ thông qua nhiều luồng. Để sử dụng nó, chúng tôi sẽ đảm bảo rằng chức năng sẽ chỉ hoạt động trên một URL duy nhất Sau đó, chúng tôi sẽ chuyển danh sách URL hình ảnh cho nhiều công nhân 😉 7____28 9Đoạn mã dưới đây sẽ tạo một thư mục mới và sau đó đặt nó làm thư mục hoạt động hiện tại 0 1Bạn nên tải xuống hình ảnh nhưng với tốc độ nhanh hơn nhiều Lập trình không đồng bộCũng giống như JavaScript, Python 3. 6+ đi kèm với hỗ trợ riêng cho các đồng quy trình được gọi là asyncio. Tương tự như NodeJS, có một phương pháp dành cho bạn để tạo các vòng lặp sự kiện tùy chỉnh cho mã không đồng bộ Chúng tôi cũng sẽ cần tải xuống thư viện yêu cầu HTTP mã không đồng bộ có tên là aiohttp 2Chúng tôi cũng sẽ tải xuống aiofiles cho phép chúng tôi ghi nhiều tệp hình ảnh không đồng bộ 3____34 5Cách tải xuống 1 tệp không đồng bộ 6 7____38 9Chúng tôi sẽ cần cấu trúc mã hơi khác một chút để phiên bản không đồng bộ hoạt động trên nhiều tệp
0 1 2☝️☝️☝️ Lưu ý khi chúng ta gọi hàm này, nó không thực sự chạy và tạo ra một đồng quy trình. ☝️☝️☝️ Sau đó, chúng tôi có thể sử dụng asyncio làm phương thức để thực hiện tất cả các lệnh gọi tìm nạp cần được hoàn thành Nếu bạn gặp loại lỗi này khi chạy lệnh sau 3Có khả năng là do bạn đang cố chạy asyncio trong một vòng lặp sự kiện, điều này không thể thực hiện được. (Máy tính xách tay Jupyter chạy trong một vòng lặp sự kiện. ) Theo thiết kế, asyncio không cho phép vòng lặp sự kiện của nó được lồng vào nhau. Điều này đặt ra một vấn đề thực tế. Khi ở trong môi trường nơi vòng lặp sự kiện đang chạy, không thể chạy tác vụ và chờ kết quả. Cố gắng làm như vậy sẽ báo lỗi “RuntimeError. Vòng lặp sự kiện này đang chạy” Do đó, bạn sẽ cần sử dụng thư viện Nest-asyncio khi sử dụng Jupyter Notebook 4Cách tải xuống nhiều tệp Python bên trong tệp Python (. py)Hãy lưu biến chứa các URL của chúng ta vào một. tập tin txt 5Tạo một tệp PythonSau đó, bạn sẽ cần tạo một tệp python và thêm đoạn mã sau vào đó 6Sau đó chạy tập lệnh python trong thiết bị đầu cuối/dòng lệnh của bạn với 7Hãy chia nhỏ những gì đang xảy ra trong đoạn mã trên
Cuối cùng, hãy dọn dẹp và xóa tất cả các thư mục để làm sạch môi trường của chúng ta _______48____49____50Khả năng tải xuống hình ảnh bằng python cho phép bạn mở rộng khả năng tự động hóa của mình và những chương trình, API khác, v.v. mà bạn có thể sử dụng dữ liệu hình ảnh đó với |