Cách tốt hơn là sử dụng gói yêu cầu. Đây là một ví dụ đơn giản để tải xuống một hình ảnh bằng cách sử dụng các yêu cầu
import requests
url = "//cdn.pixabay.com/photo/2020/05/12/17/04/wind-turbine-5163993_960_720.jpg"
r = requests.get[url]
with open["wind-turbine.jpg", "wb"] as f:
f.write[r.content]
Tải xuống các tệp lớn với tính năng phát trực tuyến
phản ứng. iter_content
Trong đoạn mã trên, tất cả nội dung của hình ảnh sẽ được đọc vào bộ nhớ cùng một lúc. Nếu hình ảnh lớn, nó có thể tiêu tốn quá nhiều bộ nhớ
Ngoài ra, chúng tôi có thể đặt tham số stream
thành True
để truyền yêu cầu. Trong trường hợp này, chỉ có tiêu đề phản hồi được tải xuống. Chúng tôi có thể truy xuất toàn bộ hình ảnh bằng cách sử dụng response.content
1 hoặc từng đoạn bằng cách sử dụng phương pháp response.iter_content
# Using requests to download large files.
with requests.get[url, stream=True] as r:
with open["wind-turbine.jpg", "wb"] as f:
for chunk in r.iter_content[chunk_size=1024]:
if chunk:
f.write[chunk]
phản ứng. thô
Khi stream
là True
, chúng tôi cũng có thể sử dụng
import urllib.request
# The following way works. Ref: //stackoverflow.com/a/45358832/6064933
req = urllib.request.Request[url, headers={'User-Agent': 'Mozilla/5.0'}]
with open["wind_turbine.jpg", "wb"] as f:
with urllib.request.urlopen[req] as r:
f.write[r.read[]]
2 để tải xuống trực tuyến. import urllib.request
# The following way works. Ref: //stackoverflow.com/a/45358832/6064933
req = urllib.request.Request[url, headers={'User-Agent': 'Mozilla/5.0'}]
with open["wind_turbine.jpg", "wb"] as f:
with urllib.request.urlopen[req] as r:
f.write[r.read[]]
2 là một đối tượng giống như tệp. Với sự trợ giúp của import urllib.request
# The following way works. Ref: //stackoverflow.com/a/45358832/6064933
req = urllib.request.Request[url, headers={'User-Agent': 'Mozilla/5.0'}]
with open["wind_turbine.jpg", "wb"] as f:
with urllib.request.urlopen[req] as r:
f.write[r.read[]]
4, chúng ta có thể lưu hình ảnh như thế này