Làm thế nào để bạn tạo một liên kết tải xuống trong python?

Trong hướng dẫn này, bạn sẽ học cách tải xuống các tệp từ web bằng các mô-đun Python khác nhau. Bạn sẽ tải xuống các tệp thông thường, trang web, Amazon S3 và các nguồn khác

Ngoài ra, bạn sẽ học cách vượt qua nhiều thách thức mà bạn có thể gặp phải, chẳng hạn như tải xuống các tệp chuyển hướng, tải xuống các tệp lớn, tải xuống đa luồng và các chiến thuật khác

 

Mục lục

  • Sử dụng yêu cầu
  • Sử dụng wget
  • Tải xuống tệp chuyển hướng
  • Tải xuống tệp lớn theo khối
  • Tải xuống nhiều tệp [Tải xuống song song/hàng loạt]
  • Tải xuống với một thanh tiến trình
  • Tải xuống một trang web bằng urllib
  • Tải xuống qua proxy
  • Sử dụng urllib3
  • Tải xuống tệp từ S3 bằng boto3
  • Sử dụng asyncio

 

Sử dụng yêu cầu

Bạn có thể tải xuống các tệp từ một URL bằng mô-đun yêu cầu

Hãy xem xét mã dưới đây

import requests
url = '//www.python.org/static/img/python-logo@2x.png'
myfile = requests.get[url]
open['c:/users/LikeGeeks/downloads/PythonImage.png', 'wb'].write[myfile.content]

Đơn giản, lấy URL bằng cách sử dụng phương thức get của mô-đun yêu cầu và lưu kết quả vào một biến “myfile” biến. Sau đó, bạn viết nội dung của biến vào một tệp

 

Sử dụng wget

Bạn cũng có thể tải xuống tệp từ URL bằng cách sử dụng mô-đun wget của Python. Cài đặt mô-đun wget bằng pip như sau

pip install wget

Hãy xem xét đoạn mã sau mà chúng tôi sẽ tải xuống hình ảnh logo của Python

import wget
url = "//www.python.org/static/img/python-logo@2x.png"
wget.download[url, 'c:/users/LikeGeeks/downloads/pythonLogo.png']

Trong mã này, chúng tôi đã chuyển URL cùng với đường dẫn [nơi chúng tôi sẽ lưu trữ hình ảnh] đến phương thức tải xuống của mô-đun wget

Tải xuống tệp chuyển hướng

Trong phần này, bạn sẽ học cách tải xuống từ một URL chuyển hướng đến một URL khác bằng một. tập tin pdf sử dụng yêu cầu. URL giống như sau

//readthedocs.org/projects/python-guide/downloads/pdf/latest/

Để tải xuống tệp pdf này, hãy sử dụng đoạn mã sau

import requests
url = '//readthedocs.org/projects/python-guide/downloads/pdf/latest/'
myfile = requests.get[url, allow_redirects=True]
open['c:/users/LikeGeeks/documents/hello.pdf', 'wb'].write[myfile.content]

Trong mã này, bước đầu tiên chúng tôi chỉ định URL. Sau đó, chúng tôi sử dụng phương thức get của mô-đun yêu cầu để tìm nạp URL. Trong phương thức get, chúng tôi đặt allow_redirects thành True, điều này sẽ cho phép chuyển hướng trong URL. Sau khi chuyển hướng, nội dung sẽ nằm trong biến myfile

Cuối cùng, chúng tôi mở một tệp để ghi nội dung đã tìm nạp

 

Tải xuống tệp lớn theo khối

Xem xét mã thổi

import requests
url = '//www.cs.uky.edu/~keen/115/Haltermanpythonbook.pdf'
r = requests.get[url, stream = True]
with open["PythonBook.pdf", "wb"] as Pypdf:
	for chunk in r.iter_content[chunk_size = 1024]:
		if chunk:
			Pypdf.write[chunk]

Đầu tiên, chúng tôi sử dụng phương thức get của mô-đun yêu cầu như chúng tôi đã làm trước đây, nhưng lần này chúng tôi sẽ đặt thuộc tính luồng thành True

Sau đó, chúng tôi tạo một tệp có tên PythonBook. pdf trong thư mục làm việc hiện tại và mở nó để viết

Sau đó, chúng tôi chỉ định kích thước khối mà chúng tôi muốn tải xuống tại một thời điểm. Chúng tôi đã đặt thành 1024 byte. Lặp lại từng đoạn và ghi các đoạn đó vào tệp cho đến khi hoàn thành các đoạn đó

Shell Python sẽ giống như sau khi các khối đang tải xuống

Không đẹp?

 

Tải xuống nhiều tệp [Tải xuống song song/hàng loạt]

Để tải xuống nhiều tệp cùng một lúc, hãy nhập các mô-đun sau

import os
import requests
from time import time
from multiprocessing.pool import ThreadPool

Chúng tôi đã nhập các mô-đun hệ điều hành và thời gian để kiểm tra xem mất bao nhiêu thời gian để tải xuống các tệp. Mô-đun ThreadPool cho phép bạn chạy nhiều luồng hoặc quy trình bằng nhóm

Hãy tạo một hàm đơn giản để gửi phản hồi tới một tệp theo khối

def url_response[url]:
    path, url = url
    r = requests.get[url, stream = True]
    with open[path, 'wb'] as f:
        for ch in r:
            f.write[ch]

Biến URLs là một mảng hai chiều chỉ định đường dẫn và URL của trang bạn muốn tải xuống

________số 8

Chuyển URL tới các yêu cầu. được như chúng ta đã làm trong phần trước. Cuối cùng, mở tệp [đường dẫn được chỉ định trong URL] và viết nội dung của trang

Bây giờ chúng ta có thể gọi riêng hàm này cho từng URL và chúng ta cũng có thể gọi hàm này cho tất cả các URL cùng một lúc. Hãy làm điều đó cho từng URL riêng biệt trong vòng lặp for và để ý bộ đếm thời gian

start = time[]
for x in urls:
    url_response [x]
print[f"Time to download: {time[] - start}"]

Kết quả sẽ như thế này

Bây giờ thay thế vòng lặp for bằng dòng mã sau

pip install wget
0

Chạy tập lệnh

 

Tải xuống với một thanh tiến trình

Thanh tiến trình là một tiện ích giao diện người dùng của mô-đun clint. Để cài đặt mô-đun clint, gõ lệnh sau

pip install wget
1

Hãy xem xét đoạn mã sau

pip install wget
2

Trong mã này, chúng tôi đã nhập mô-đun yêu cầu và sau đó từ clint. textui, chúng tôi đã nhập tiện ích tiến trình. Sự khác biệt duy nhất là trong vòng lặp for. Chúng tôi đã sử dụng phương thức thanh của mô-đun tiến trình trong khi ghi nội dung vào tệp. Đầu ra sẽ giống như sau

Tải xuống một trang web bằng urllib

Trong phần này, chúng tôi sẽ tải xuống một trang web bằng urllib

Thư viện urllib là thư viện chuẩn của Python nên bạn không cần cài đặt

Dòng mã sau đây có thể dễ dàng tải xuống một trang web

pip install wget
3

Chỉ định URL ở đây mà bạn muốn lưu dưới dạng và nơi bạn muốn lưu trữ nó

pip install wget
4

Trong mã này, chúng tôi đã sử dụng phương thức urlretrieve và chuyển URL của tệp cùng với đường dẫn nơi chúng tôi sẽ lưu tệp. Phần mở rộng tập tin sẽ là. html

 

Tải xuống qua proxy

Nếu bạn cần sử dụng proxy để tải xuống các tệp của mình, bạn có thể sử dụng ProxyHandler của mô-đun urllib. Kiểm tra đoạn mã sau

pip install wget
5

Trong mã này, chúng tôi đã tạo đối tượng proxy và mở proxy bằng cách gọi phương thức build_opener của urllib và chuyển đối tượng proxy. Sau đó, chúng tôi đã thực hiện yêu cầu truy xuất trang

Ngoài ra, bạn có thể sử dụng mô-đun yêu cầu như được ghi trong tài liệu chính thức

pip install wget
6

Chỉ cần nhập mô-đun yêu cầu và tạo đối tượng proxy của bạn. Sau đó, bạn có thể truy xuất tệp

Sử dụng urllib3

urllib3 là phiên bản cải tiến của mô-đun urllib. Bạn có thể tải xuống và cài đặt nó bằng pip

pip install wget
7

Chúng tôi sẽ tìm nạp một trang web và lưu trữ nó trong một tệp văn bản bằng cách sử dụng urllib3

Nhập các mô-đun sau

pip install wget
8

Bạn có thể sử dụng mô-đun Shutil khi làm việc với tệp. Bây giờ hãy khởi tạo biến chuỗi URL như thế này

pip install wget
9

Sau đó, chúng tôi sử dụng PoolManager của urllib3 để theo dõi các nhóm kết nối cần thiết

import wget
url = "//www.python.org/static/img/python-logo@2x.png"
wget.download[url, 'c:/users/LikeGeeks/downloads/pythonLogo.png']
0

Tạo một tập tin

import wget
url = "//www.python.org/static/img/python-logo@2x.png"
wget.download[url, 'c:/users/LikeGeeks/downloads/pythonLogo.png']
1

Cuối cùng, chúng tôi gửi yêu cầu GET để tìm nạp URL và mở tệp và viết phản hồi vào tệp đó

import wget
url = "//www.python.org/static/img/python-logo@2x.png"
wget.download[url, 'c:/users/LikeGeeks/downloads/pythonLogo.png']
2

 

Tải xuống tệp từ S3 bằng boto3

Để tải xuống tệp từ Amazon S3, bạn có thể sử dụng mô-đun boto3 của Python

Trước tiên, bạn cần cài đặt mô-đun awscli bằng pip

import wget
url = "//www.python.org/static/img/python-logo@2x.png"
wget.download[url, 'c:/users/LikeGeeks/downloads/pythonLogo.png']
3

Đối với cấu hình AWS, hãy chạy lệnh sau

import wget
url = "//www.python.org/static/img/python-logo@2x.png"
wget.download[url, 'c:/users/LikeGeeks/downloads/pythonLogo.png']
4

Bây giờ hãy nhập thông tin chi tiết của bạn dưới dạng

import wget
url = "//www.python.org/static/img/python-logo@2x.png"
wget.download[url, 'c:/users/LikeGeeks/downloads/pythonLogo.png']
5

Để tải xuống một tệp từ Amazon S3, hãy nhập boto3 và botocore. Boto3 là ​​SDK Amazon dành cho Python để truy cập các dịch vụ web của Amazon như S3. Botocore cung cấp các dịch vụ dòng lệnh để tương tác với các dịch vụ web của Amazon

Botocore đi kèm với awscli. Để cài đặt boto3, hãy chạy như sau

import wget
url = "//www.python.org/static/img/python-logo@2x.png"
wget.download[url, 'c:/users/LikeGeeks/downloads/pythonLogo.png']
6

Bây giờ nhập hai mô-đun này

import wget
url = "//www.python.org/static/img/python-logo@2x.png"
wget.download[url, 'c:/users/LikeGeeks/downloads/pythonLogo.png']
7

Khi tải xuống tệp từ Amazon, chúng tôi cần ba tham số

  1. Tên Xô
  2. Tên của tệp bạn cần tải xuống
  3. Tên của tệp sau khi đã tải xuống

Khởi tạo các biến

import wget
url = "//www.python.org/static/img/python-logo@2x.png"
wget.download[url, 'c:/users/LikeGeeks/downloads/pythonLogo.png']
8

Bây giờ hãy khởi tạo một biến để sử dụng tài nguyên của phiên. Đối với điều này, chúng tôi sẽ gọi phương thức resource[] của boto3 và chuyển dịch vụ là s3

import wget
url = "//www.python.org/static/img/python-logo@2x.png"
wget.download[url, 'c:/users/LikeGeeks/downloads/pythonLogo.png']
9

Cuối cùng, tải xuống tệp bằng cách sử dụng phương thức download_file và chuyển các biến

//readthedocs.org/projects/python-guide/downloads/pdf/latest/
0

 

Sử dụng asyncio

Bạn có thể sử dụng mô-đun asyncio để xử lý các sự kiện hệ thống. Nó hoạt động xung quanh một vòng lặp sự kiện chờ đợi một sự kiện xảy ra và sau đó phản ứng với sự kiện đó. Phản ứng có thể gọi một chức năng khác. Quá trình này được gọi là xử lý sự kiện. Mô-đun asyncio sử dụng coroutines để xử lý sự kiện

Để sử dụng chức năng coroutine và xử lý sự kiện asyncio, chúng tôi sẽ nhập mô-đun asyncio

//readthedocs.org/projects/python-guide/downloads/pdf/latest/
1

Ngoài ra, chúng ta cần cài đặt mô-đun aiohttp

//readthedocs.org/projects/python-guide/downloads/pdf/latest/
2

Chúng tôi sẽ nhập mô-đun async_timeout để xử lý thời gian chờ

//readthedocs.org/projects/python-guide/downloads/pdf/latest/
3

Từ khóa async cho biết đây là asyncio coroutine gốc. Bên trong phần thân của coroutine, chúng ta có từ khóa đang chờ, trả về một giá trị nhất định. Chúng tôi cũng đã sử dụng từ khóa trả về

Bây giờ, hãy tạo mã bằng coroutine để tải xuống các tệp từ web

//readthedocs.org/projects/python-guide/downloads/pdf/latest/
4

Trong mã này, chúng tôi đã tạo một chức năng quy trình đăng ký không đồng bộ để tải xuống các tệp của chúng tôi theo khối và lưu chúng với một tên tệp ngẫu nhiên và trả về một thông báo

Sau đó, chúng tôi có một quy trình không đồng bộ khác gọi get_url và đợi các URL và tạo một hàng đợi của tất cả các URL

Bây giờ để khởi động coroutine, chúng ta phải đặt coroutine bên trong vòng lặp sự kiện bằng cách sử dụng phương thức get_event_loop[] của asyncio và cuối cùng, vòng lặp sự kiện được thực thi bằng phương thức run_until_complete[] của asyncio

Tải xuống tệp bằng Python rất thú vị. Tôi hy vọng bạn tìm thấy hướng dẫn hữu ích

Cảm ơn bạn

  • Chia sẻ trên facebook
  • Tweet trên Twitter

Mokhtar Ebrahim

Mokhtar là người sáng lập LikeGeek. com. Anh ấy làm quản trị viên hệ thống Linux từ năm 2010. Ông chịu trách nhiệm duy trì, bảo mật và khắc phục sự cố máy chủ Linux cho nhiều khách hàng trên khắp thế giới. Anh ấy thích viết các tập lệnh shell và Python để tự động hóa công việc của mình

Chủ Đề