Làm cách nào để tải xuống hình ảnh từ internet bằng python?
Bất cứ khi nào bạn truy cập bất kỳ trang web nào, bạn có thể bắt gặp các loại nội dung khác nhau, từ văn bản đến hình ảnh, âm thanh đến video. Đôi khi, bạn chỉ muốn đọc nội dung, lướt qua thông tin. Những lần khác, bạn có thể muốn lưu thông tin trên trang để tham khảo sau này Show Hãy xem xét trường hợp bạn muốn tải xuống tất cả hình ảnh từ một trang web. Tải xuống riêng lẻ tất cả chúng không chỉ tốn nhiều công việc thủ công mà còn rất tốn thời gian và không hiệu quả. Nhưng hãy đoán xem, bạn có thể giải quyết vấn đề này bằng cách sử dụng Python. Trong hướng dẫn này, bạn sẽ học cách tải xuống tất cả hình ảnh của trang web bằng Python Kỹ thuật download toàn bộ hình ảnh của một trang web bằng Python. Rút trích nội dung trang webWeb Scraping về cơ bản là một phương pháp được sử dụng để trích xuất dữ liệu từ nhiều. Dữ liệu này có thể ở bất kỳ dạng nào - văn bản, hình ảnh, âm thanh, video, v.v. Bây giờ, chúng ta hãy tìm hiểu cách trích xuất hình ảnh từ trang web bằng cách sử dụng kỹ thuật trên, nhưng thông qua python Cài đặt các module cần thiết
Một mã đơn giản để thực hiện tải xuốngimport re import requests from bs4 import BeautifulSoup site = 'https://www.codespeedy.com/' response = requests.get(site) soup = BeautifulSoup(response.text, 'html.parser') image_tags = soup.find_all('img') urls = [img['src'] for img in image_tags] for url in urls: filename = re.search(r'/([\w_-]+[.](jpg|gif|png))$', url) if not filename: print("Regular expression didn't match with the url: {}".format(url)) continue with open(filename.group(1), 'wb') as f: if 'http' not in url: url = '{}{}'.format(site, url) response = requests.get(url) f.write(response.content) print("Download complete, downloaded images can be found in current directory!") Download complete, downloaded images can be found in current directory! Trong đoạn mã trên;
Mã chi tiết hơnMột mã toàn diện hơn, trong đó URL được nhập rõ ràng và hình ảnh được tải xuống và lưu trữ trong một thư mục mới do người dùng chỉ định, cùng với việc theo dõi số lượng hình ảnh trên trang web như sau from bs4 import * import requests import os def folder_create(images): folder_name = input("Enter name of folder: ") os.mkdir(folder_name) download_images(images, folder_name) def download_images(images, folder_name): count = 0 print(f"Found {len(images)} images") if len(images) != 0: for i, image in enumerate(images): image_link = image["src"] r = requests.get(image_link).content with open(f"{folder_name}/images{i+1}.jpg", "wb+") as f: f.write(r) count += 1 if count == len(images): print("All the images have been downloaded!") else: print(f" {count} images have been downloaded out of {len(images)}") def main(url): r = requests.get(url) soup = BeautifulSoup(r.text, 'html.parser') images = soup.findAll('img') folder_create(images) url = input("Enter site URL:") main(url) Enter site URL:https://www.codespeedy.com/ Enter name of folder: abc Found 13 images All the images have been downloaded! Một thư mục có tên ABC được tạo trong thư mục hiện tại và các hình ảnh được tải xuống thư mục đó Bạn đã bao giờ muốn tải xuống tất cả hình ảnh trên một trang web nhất định chưa? Để bắt đầu, chúng tôi cần khá nhiều phụ thuộc, hãy cài đặt chúng
Mở một tệp Python mới và nhập các mô-đun cần thiết
Trước tiên, hãy tạo một trình xác thực URL để đảm bảo rằng URL được chuyển là hợp lệ, vì có một số trang web đặt dữ liệu được mã hóa vào vị trí của URL, vì vậy chúng ta cần bỏ qua những trang web đó.
hàm urlparse() phân tích một URL thành sáu thành phần, chúng ta chỉ cần xem liệu netloc (tên miền) và lược đồ (giao thức) có ở đó không Thứ hai, tôi sẽ viết chức năng cốt lõi lấy tất cả các URL hình ảnh của một trang web
Nội dung HTML của trang web nằm trong đối tượng 1, để trích xuất tất cả các thẻ img trong HTML, chúng ta cần sử dụng phương thức 2, hãy cùng xem thực tếDownload complete, downloaded images can be found in current directory!0 Điều này sẽ truy xuất tất cả các phần tử img dưới dạng danh sách Python Mặc dù vậy, tôi đã bọc nó trong một đối tượng tqdm chỉ để in thanh tiến trình. Để lấy URL của thẻ img, có thuộc tính src. Tuy nhiên, có một số thẻ không chứa thuộc tính src, chúng ta bỏ qua chúng bằng cách sử dụng câu lệnh continue ở trên Bây giờ chúng tôi cần đảm bảo rằng URL là tuyệt đối Download complete, downloaded images can be found in current directory!1 Có một số URL chứa các cặp khóa-giá trị HTTP GET mà chúng tôi không thích (kết thúc bằng một cái gì đó như thế này "/image. png?c=3. 2. 5"), hãy loại bỏ chúng Download complete, downloaded images can be found in current directory!2 Chúng tôi đang nhận được vị trí của '?' Bây giờ, hãy đảm bảo rằng mọi URL đều hợp lệ và trả về tất cả các URL hình ảnh Download complete, downloaded images can be found in current directory!3 Bây giờ chúng ta có một chức năng lấy tất cả các URL hình ảnh, chúng ta cần một chức năng để tải xuống các tệp từ web bằng Python, tôi đã mang chức năng sau từ hướng dẫn này Download complete, downloaded images can be found in current directory!4 Chức năng trên về cơ bản lấy url của tệp để tải xuống và tên đường dẫn của thư mục để lưu tệp đó vào Có liên quan. Cách chuyển đổi bảng HTML thành tệp CSV bằng Python Cuối cùng, đây là chức năng chính Download complete, downloaded images can be found in current directory!5 Lấy tất cả các URL hình ảnh từ trang đó và tải xuống từng cái một. Hãy kiểm tra điều này 0Điều này sẽ tải xuống tất cả các hình ảnh từ URL đó và lưu trữ chúng trong thư mục "hình ảnh yandex" sẽ được tạo tự động Tuy nhiên, xin lưu ý rằng có một số trang web tải dữ liệu của họ bằng Javascript, trong trường hợp đó, bạn nên sử dụng thư viện request_html thay thế, tôi đã tạo một tập lệnh khác thực hiện một số chỉnh sửa cho tập lệnh gốc và xử lý kết xuất Javascript, hãy kiểm tra tại đây Được rồi, chúng tôi đã hoàn tất. Dưới đây là một số ý tưởng bạn có thể triển khai để mở rộng mã của mình Bạn muốn tìm hiểu thêm về Web Scraping?Cuối cùng, nếu bạn muốn tìm hiểu sâu hơn về web scraping với các thư viện Python khác nhau, không chỉ BeautifulSoup, các khóa học dưới đây chắc chắn sẽ có giá trị cho bạn |