Computer >> Máy Tính >  >> Lập trình >> Python

Tải xuống tệp từ web bằng Python?

Python cung cấp các mô-đun khác nhau như urllib, yêu cầu, v.v. để tải tệp xuống từ web. Tôi sẽ sử dụng thư viện yêu cầu của python để tải xuống các tệp từ URL một cách hiệu quả.

Hãy bắt đầu xem xét quy trình từng bước để tải xuống tệp bằng URL sử dụng thư viện yêu cầu−

1. Nhập mô-đun

import requests

2. Lấy liên kết hoặc url

url = 'https://www.facebook.com/favicon.ico'
r = requests.get(url, allow_redirects=True)

3. Lưu nội dung với tên.

open('facebook.ico', 'wb').write(r.content)

lưu tệp dưới dạng facebook.ico.

Ví dụ

import requests


url = 'https://www.facebook.com/favicon.ico'
r = requests.get(url, allow_redirects=True)

open('facebook.ico', 'wb').write(r.content)

Kết quả

Tải xuống tệp từ web bằng Python?

Chúng tôi có thể thấy tệp đã được tải xuống (biểu tượng) trong thư mục làm việc hiện tại của chúng tôi.

Nhưng chúng tôi có thể cần tải xuống các loại tệp khác nhau như hình ảnh, văn bản, video, v.v. từ web. Vì vậy, trước tiên hãy lấy loại dữ liệu mà url đang liên kết đến−

>>> r = requests.get(url, allow_redirects=True)
>>> print(r.headers.get('content-type'))
image/png

Tuy nhiên, có một cách thông minh hơn, chỉ cần tìm nạp tiêu đề của url trước khi thực sự tải xuống. Điều này cho phép chúng tôi bỏ qua việc tải xuống các tệp không phải để tải xuống.

>>> print(is_downloadable('https://www.youtube.com/watch?v=xCglV_dqFGI'))
False
>>> print(is_downloadable('https://www.facebook.com/favicon.ico'))
True

Để hạn chế tải xuống theo kích thước tệp, chúng tôi có thể lấy tệpzie từ tiêu đề độ dài nội dung và sau đó thực hiện theo yêu cầu của chúng tôi.

contentLength = header.get('content-length', None)
if contentLength and contentLength > 2e8: # 200 mb approx
return False

Lấy tên tệp từ một URL

Để lấy tên tệp, chúng ta có thể phân tích cú pháp url. Dưới đây là một quy trình mẫu tìm nạp chuỗi cuối cùng sau dấu gạch chéo ngược (/).

url= "https://www.computersolution.tech/wp-content/uploads/2016/05/tutorialspoint-logo.png"
if url.find('/'):
print(url.rsplit('/', 1)[1]

Ở trên sẽ cung cấp cho tên tệp của url. Tuy nhiên, có nhiều trường hợp thông tin tên tệp không có trong url chẳng hạn - https://url.com/download. Trong trường hợp như vậy, chúng ta cần lấy tiêu đề Nội dung-Bố trí, chứa thông tin tên tệp.

import requests
import re

def getFilename_fromCd(cd):
"""
Get filename from content-disposition
"""
if not cd:
return None
fname = re.findall('filename=(.+)', cd)
if len(fname) == 0:
return None
return fname[0]


url = 'https://google.com/favicon.ico'
r = requests.get(url, allow_redirects=True)
filename = getFilename_fromCd(r.headers.get('content-disposition'))
open(filename, 'wb').write(r.content)

Mã phân tích cú pháp url ở trên kết hợp với chương trình trên sẽ cung cấp cho bạn tên tệp từ tiêu đề Nội dung-Bố trí hầu hết thời gian.