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
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
- Thay đổi thành một thư mục nơi chúng tôi muốn lưu trữ tất cả các hình ảnh
- Yêu cầu tải xuống tất cả các hình ảnh, từng cái một
- Chúng tôi cũng sẽ bao gồm xử lý lỗi để nếu một URL không còn tồn tại thì mã vẫn hoạt động
Nhập khẩu Python
!pip install tldextract
Requirement already satisfied: tldextract in /opt/anaconda3/lib/python3.7/site-packages [2.2.2]
Requirement already satisfied: requests>=2.1.0 in /opt/anaconda3/lib/python3.7/site-packages [from tldextract] [2.22.0]
Requirement already satisfied: setuptools in /opt/anaconda3/lib/python3.7/site-packages [from tldextract] [46.0.0.post20200309]
Requirement already satisfied: requests-file>=1.4 in /opt/anaconda3/lib/python3.7/site-packages [from tldextract] [1.5.1]
Requirement already satisfied: idna in /opt/anaconda3/lib/python3.7/site-packages [from tldextract] [2.8]
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,=1.21.1 in /opt/anaconda3/lib/python3.7/site-packages [from requests>=2.1.0->tldextract] [1.25.8]
Requirement already satisfied: chardet=3.0.2 in /opt/anaconda3/lib/python3.7/site-packages [from requests>=2.1.0->tldextract] [3.0.4]
Requirement already satisfied: certifi>=2017.4.17 in /opt/anaconda3/lib/python3.7/site-packages [from requests>=2.1.0->tldextract] [2019.11.28]
Requirement already satisfied: six in /opt/anaconda3/lib/python3.7/site-packages [from requests-file>=1.4->tldextract] [1.14.0]
import requests
import os
import subprocess
import urllib.request
from bs4 import BeautifulSoup
import tldextract
!mkdir all_images
!ls
☝️☝️☝️ 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
!ls
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
!ls
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
!ls
5Tạo một tệp Python
Sau đó, bạn sẽ cần tạo một tệp python và thêm đoạn mã sau vào đó
!ls
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
!ls
7Hãy chia nhỏ những gì đang xảy ra trong đoạn mã trên
- Chúng tôi đang nhập tất cả các gói có liên quan để lập trình không đồng bộ với các tệp
- Sau đó, chúng tôi tạo một thư mục mới
- Sau khi tạo thư mục mới, chúng tôi thay đổi thư mục đó thành thư mục làm việc đang hoạt động
- Sau đó, chúng tôi đọc dữ liệu biến đã được lưu trước đó từ tệp có tên là hình ảnh. txt
- Sau đó, chúng tôi tạo một loạt các đồng quy trình và thực thi chúng trong hàm main[] với asyncio
- Khi các đồng quy trình này được thực thi, mọi tệp được lưu không đồng bộ vào máy tính của bạ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
!ls
8!ls
9# !cd all_images
# os.chdir['path']
0Khả 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
Chúng tôi sử dụng mô-đun urllib2 để tải xuống dữ liệu trang web. Bất kỳ trang web nào được định dạng bằng ngôn ngữ đánh dấu được gọi là HTML
Trích xuất liên kết hình ảnh
Để trích xuất tất cả các liên kết hình ảnh, hãy sử dụng
from BeautifulSoup import BeautifulSoup
import urllib2
import rehtml_page = urllib2.urlopen["//imgur.com"]
soup = BeautifulSoup[html_page]
images = []
for img in soup.findAll['img']:
images.append[img.get['src']]print[images]
Giải trình
Đầu tiên chúng tôi nhập các mô-đun cần thiết
from BeautifulSoup import BeautifulSoup
import urllib2
import re
`
Chúng tôi lấy dữ liệu trang web bằng cách sử dụng
html_page = urllib2.urlopen["//imgur.com"]
Sau đó, chúng tôi trích xuất tất cả các liên kết hình ảnh bằng cách sử dụng
images = []
for img in soup.findAll['img']:
images.append[img.get['src']]
Cuối cùng chúng tôi in các liên kết