Làm cách nào để tải xuống hình ảnh từ URL trong Python?

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

pip3 install requests bs4 tqdm

Mở một tệp Python mới và nhập các mô-đun cần thiết

import requests
import os
from tqdm import tqdm
from bs4 import BeautifulSoup as bs
from urllib.parse import urljoin, urlparse

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 đó.

def is_valid[url]:
    """
    Checks whether `url` is a valid URL.
    """
    parsed = urlparse[url]
    return bool[parsed.netloc] and bool[parsed.scheme]

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

def get_all_images[url]:
    """
    Returns all image URLs on a single `url`
    """
    soup = bs[requests.get[url].content, "html.parser"]

Nội dung HTML của trang web nằm trong đối tượng

import requests
import os
from tqdm import tqdm
from bs4 import BeautifulSoup as bs
from urllib.parse import urljoin, urlparse
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
import requests
import os
from tqdm import tqdm
from bs4 import BeautifulSoup as bs
from urllib.parse import urljoin, urlparse
2, hãy cùng xem nó hoạt động như thế nào

    urls = []
    for img in tqdm[soup.find_all["img"], "Extracting images"]:
        img_url = img.attrs.get["src"]
        if not img_url:
            # if img does not contain src attribute, just skip
            continue

Đ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

        # make the URL absolute by joining domain with the URL that is just extracted
        img_url = urljoin[url, img_url]

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

________số 8

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

        # finally, if the url is valid
        if is_valid[img_url]:
            urls.append[img_url]
    return urls

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

import requests
import os
from tqdm import tqdm
from bs4 import BeautifulSoup as bs
from urllib.parse import urljoin, urlparse
0

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

import requests
import os
from tqdm import tqdm
from bs4 import BeautifulSoup as bs
from urllib.parse import urljoin, urlparse
1

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

import requests
import os
from tqdm import tqdm
from bs4 import BeautifulSoup as bs
from urllib.parse import urljoin, urlparse
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 xem

Đượ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

Chủ Đề