Tiêu đề kiểu nội dung python
Bài đăng này nhằm mục đích trình bày cho bạn cách tải xuống tài nguyên từ URL đã cho bằng cách sử dụng mô-đun yêu cầu. Tất nhiên, có những mô-đun khác cho phép bạn thực hiện mục đích này nhưng tôi chỉ tập trung giải thích cách thực hiện với mô-đun yêu cầu và để bạn khám phá các phương pháp khác. Hãy bắt đầu ngay bây giờ
Mục lục Show Dưới đây là đoạn đơn giản để tải logo của Google trong trang tìm kiếm Google qua đường dẫn https. //www. Google. đồng. Anh/hình ảnh/xây dựng thương hiệu/googlelogo/1x/googlelogo_color_272x92dp. png import requests url = "https://www.google.co.uk/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png" r = requests.get(url, allow_redirects=True) open("google.ico", "wb").write(r.content) Tệp có tên Thế giới thực là bạn gần như chắc chắn xử lý các trường hợp tài nguyên tải xuống được bảo vệ không cho phép người dùng tải xuống. Ví dụ: các video Youtube đã được bảo mật để ngăn người dùng tham lam tải xuống. Mọi người phát triển tiện ích mở rộng trình duyệt hoặc ứng dụng độc lập để tải xuống video Youtube, tuy nhiên, Google đã phát hiện ra các hoạt động bạo lực đó và ngày càng bảo vệ dữ liệu của họ. Do đó, điều quan trọng là phải kiểm tra xem tài nguyên quan tâm có được phép tải xuống hay không trước khi gửi yêu cầu. Đoạn mã bên dưới mô phỏng cách kiểm tra dựa trên tham số import requests def extract_content_type(_url): r = requests.get(_url, allow_redirects=True) return r.headers.get("Content-Type") url = "https://www.google.co.uk/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png" # open("google.ico", "wb").write(r.content) print(extract_content_type(url)) url = "https://www.youtube.com/watch?v=ylk5AYyOcGI" print(extract_content_type(url)) Đầu ra của đoạn script trên trông giống như image/png text/html; charset=utf-8 Hàm Như đã giải thích trong phần trước, việc kiểm tra tài nguyên được phép tải xuống là cần thiết trước khi gửi yêu cầu Kiểm tra Content-Type của tiêu đề yêu cầuHàm bên dưới có thể làm những gì chúng ta cần bằng cách kiểm tra loại nội dung từ tiêu đề def is_downloadable(_url): """ Does the url contain a downloadable resource """ h = requests.head(_url, allow_redirects=True) header = h.headers content_type = header.get('content-type') if 'text' in content_type.lower(): return False if 'html' in content_type.lower(): return False return True Áp dụng chức năng này cho hai URL trong các ví dụ trước, nó trả về Sai cho URL Youtube trong khi True được trả về với liên kết biểu tượng của Google Hạn chế kích thước tệp của tài nguyên tải xuốngChúng tôi có thể có một hạn chế khác đối với tài nguyên tải xuống, chẳng hạn như chỉ tải xuống tệp có kích thước không lớn hơn 100 MB. Bằng cách kiểm tra tiêu đề của URL yêu cầu trên thuộc tính import requests def extract_content_type(_url): r = requests.get(_url, allow_redirects=True) return r.headers.get("Content-Type") url = "https://www.google.co.uk/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png" # open("google.ico", "wb").write(r.content) print(extract_content_type(url)) url = "https://www.youtube.com/watch?v=ylk5AYyOcGI" print(extract_content_type(url))0, mã bên dưới có thể hoạt động như mong đợi content_length = header.get('content-length', None) if content_length and content_length > 1e8: # 100 MB approx return False Lấy tên tệp từ URLMột lần nữa, để lấy tên tệp của tài nguyên tải xuống, chúng ta có thể sử dụng thuộc tính Bố trí nội dung của tiêu đề yêu cầu def get_filename_from_url(_url): """ Get filename from content-disposition """ r = requests.get(_url, allow_redirects=True) cd = r.headers.get('content-disposition') if not cd: return None filename = re.findall('filename=(.+)', cd) if len(filename) == 0: return None return filename[0] Mã phân tích cú pháp URL kết hợp với phương pháp trên để lấy tên tệp từ tiêu đề import requests def extract_content_type(_url): r = requests.get(_url, allow_redirects=True) return r.headers.get("Content-Type") url = "https://www.google.co.uk/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png" # open("google.ico", "wb").write(r.content) print(extract_content_type(url)) url = "https://www.youtube.com/watch?v=ylk5AYyOcGI" print(extract_content_type(url))1 sẽ hoạt động trong hầu hết các trường hợp thì đấy. Nếu bạn có bất kỳ đánh giá nào, xin vui lòng để lại ý kiến của bạn trong hộp bình luận bên dưới |