Hướng dẫn how do i download multiple urls from python? - làm cách nào để tải xuống nhiều url từ python?

Tự động hóa tệp có thể tiết kiệm rất nhiều thời gian. Có một số cách để tự động hóa tệp trong Python. Cách dễ nhất để tải xuống các tệp là sử dụng vòng lặp Python đơn giản để lặp lại thông qua danh sách các URL để tải xuống. Cách tiếp cận nối tiếp này có thể hoạt động tốt với một vài tệp nhỏ, nhưng nếu bạn đang tải xuống nhiều tệp hoặc tệp lớn, bạn sẽ muốn sử dụng một cách tiếp cận song song để tối đa hóa tài nguyên tính toán của bạn.

Với thói quen tải xuống tệp song song, bạn có thể tải xuống đồng thời nhiều tệp và tiết kiệm một khoảng thời gian đáng kể. Hướng dẫn trình bày cách phát triển chức năng tải xuống tệp chung trong Python và áp dụng nó để tải xuống nhiều tệp với các cách tiếp cận nối tiếp và song song. Mã trong hướng dẫn này chỉ sử dụng các mô -đun có sẵn từ Thư viện tiêu chuẩn Python, do đó không cần cài đặt.

Nhập các mô -đun

Đối với ví dụ này, chúng tôi chỉ cần các mô -đun Python ____10 và

urls = ['https://www.northwestknowledge.net/metdata/data/pr_1979.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1980.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1981.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1982.nc']
1 để tải xuống các tệp song song. Các mô -đun
urls = ['https://www.northwestknowledge.net/metdata/data/pr_1979.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1980.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1981.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1982.nc']
0 và
urls = ['https://www.northwestknowledge.net/metdata/data/pr_1979.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1980.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1981.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1982.nc']
1 đều có sẵn từ Thư viện tiêu chuẩn Python, vì vậy bạn đã giành chiến thắng để thực hiện bất kỳ cài đặt nào.

Chúng tôi cũng sẽ nhập mô -đun

urls = ['https://www.northwestknowledge.net/metdata/data/pr_1979.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1980.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1981.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1982.nc']
4 để theo dõi thời gian tải xuống các tệp riêng lẻ và so sánh hiệu suất giữa các thói quen tải xuống nối tiếp và song song. Mô -đun
urls = ['https://www.northwestknowledge.net/metdata/data/pr_1979.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1980.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1981.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1982.nc']
4 cũng là một phần của thư viện tiêu chuẩn Python.

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

Xác định URL và tên tệp

Tôi sẽ trình diễn các bản tải xuống tệp song song trong Python bằng cách sử dụng các tệp GridMMet NetCDF có chứa dữ liệu lượng mưa hàng ngày cho Hoa Kỳ.

Ở đây, tôi chỉ định các URL cho bốn tệp trong một danh sách. Trong các ứng dụng khác, bạn có thể lập trình tạo một danh sách các tệp để tải xuống.

urls = ['https://www.northwestknowledge.net/metdata/data/pr_1979.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1980.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1981.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1982.nc']

Mỗi URL phải được liên kết với vị trí tải xuống của nó. Ở đây, tôi đã tải xuống các tệp vào thư mục Windows ‘Tải xuống. Tôi đã mã hóa các tên tệp trong một danh sách cho sự đơn giản và minh bạch. Với ứng dụng của bạn, bạn có thể muốn viết mã sẽ phân tích URL đầu vào và tải xuống vào một thư mục cụ thể.

fns = [r'C:\Users\konrad\Downloads\pr_1979.nc',
r'C:\Users\konrad\Downloads\pr_1980.nc',
r'C:\Users\konrad\Downloads\pr_1981.nc',
r'C:\Users\konrad\Downloads\pr_1982.nc']

Đa xử lý đòi hỏi các chức năng song song chỉ có một đối số (có một số cách giải quyết, nhưng chúng tôi đã giành chiến thắng ở đây). Để tải xuống một tập tin, chúng tôi sẽ cần chuyển hai đối số, URL và tên tệp. Vì vậy, chúng tôi sẽ zip danh sách

urls = ['https://www.northwestknowledge.net/metdata/data/pr_1979.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1980.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1981.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1982.nc']
6 và
urls = ['https://www.northwestknowledge.net/metdata/data/pr_1979.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1980.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1981.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1982.nc']
7 cùng nhau để có được một danh sách các bộ dữ liệu. Mỗi tuple trong danh sách sẽ chứa hai yếu tố; Một URL và tên tệp tải xuống cho URL. Bằng cách này, chúng ta có thể chuyển một đối số duy nhất (tuple) chứa hai mẩu thông tin.

inputs = zip(urls, fns)

Chức năng tải xuống URL

Bây giờ chúng tôi đã chỉ định các URL để tải xuống và tên tệp liên quan của chúng, chúng tôi cần một chức năng để tải xuống URL (

urls = ['https://www.northwestknowledge.net/metdata/data/pr_1979.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1980.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1981.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1982.nc']
8).

Chúng tôi sẽ chuyển một đối số (

urls = ['https://www.northwestknowledge.net/metdata/data/pr_1979.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1980.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1981.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1982.nc']
9) cho
urls = ['https://www.northwestknowledge.net/metdata/data/pr_1979.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1980.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1981.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1982.nc']
8. Đối số này sẽ là một điều khác biệt (danh sách hoặc tuple) trong đó phần tử đầu tiên là URL tải xuống (
fns = [r'C:\Users\konrad\Downloads\pr_1979.nc',
r'C:\Users\konrad\Downloads\pr_1980.nc',
r'C:\Users\konrad\Downloads\pr_1981.nc',
r'C:\Users\konrad\Downloads\pr_1982.nc']
1) và phần tử thứ hai là tên tệp (
fns = [r'C:\Users\konrad\Downloads\pr_1979.nc',
r'C:\Users\konrad\Downloads\pr_1980.nc',
r'C:\Users\konrad\Downloads\pr_1981.nc',
r'C:\Users\konrad\Downloads\pr_1982.nc']
2). Các phần tử được gán cho các biến (
fns = [r'C:\Users\konrad\Downloads\pr_1979.nc',
r'C:\Users\konrad\Downloads\pr_1980.nc',
r'C:\Users\konrad\Downloads\pr_1981.nc',
r'C:\Users\konrad\Downloads\pr_1982.nc']
1 và
fns = [r'C:\Users\konrad\Downloads\pr_1979.nc',
r'C:\Users\konrad\Downloads\pr_1980.nc',
r'C:\Users\konrad\Downloads\pr_1981.nc',
r'C:\Users\konrad\Downloads\pr_1982.nc']
2) cho khả năng đọc.

Bây giờ hãy tạo một câu lệnh thử trong đó URL được truy xuất và ghi vào tệp sau khi nó được tạo. Khi tệp được viết, URL và thời gian tải xuống được trả về. Nếu một ngoại lệ xảy ra, một tin nhắn được in.

Hàm

urls = ['https://www.northwestknowledge.net/metdata/data/pr_1979.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1980.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1981.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1982.nc']
8 là thịt của mã của chúng tôi. Nó thực hiện công việc thực tế của việc tải xuống và tạo tập tin. Bây giờ chúng ta có thể sử dụng chức năng này để tải xuống các tệp trong sê -ri (sử dụng một vòng lặp) và song song. Hãy cùng đi qua những ví dụ đó.

def download_url(args):
    t0 = time.time()
    url, fn = args[0], args[1]
    try:
        r = requests.get(url)
        with open(fn, 'wb') as f:
            f.write(r.content)
        return(url, time.time() - t0)
    except Exception as e:
        print('Exception in download_url():', e)

Tải xuống nhiều tệp với vòng lặp Python

Để tải xuống danh sách các URL vào các tệp được liên kết, hãy lặp qua ITEBLE (

fns = [r'C:\Users\konrad\Downloads\pr_1979.nc',
r'C:\Users\konrad\Downloads\pr_1980.nc',
r'C:\Users\konrad\Downloads\pr_1981.nc',
r'C:\Users\konrad\Downloads\pr_1982.nc']
6) mà chúng tôi đã tạo, chuyển từng phần tử cho
urls = ['https://www.northwestknowledge.net/metdata/data/pr_1979.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1980.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1981.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1982.nc']
8. Sau mỗi lần tải xuống hoàn tất, chúng tôi sẽ in URL đã tải xuống và thời gian tải xuống.

Tổng thời gian để tải xuống tất cả các URL sẽ in sau khi tất cả các bản tải xuống đã được hoàn thành.

t0 = time.time()
for i in inputs:
    result = download_url(i)
    print('url:', result[0], 'time:', result[1])
print('Total time:', time.time() - t0)

Output:

url: https://www.northwestknowledge.net/metdata/data/pr_1979.nc time: 16.381176710128784
url: https://www.northwestknowledge.net/metdata/data/pr_1980.nc time: 11.475878953933716
url: https://www.northwestknowledge.net/metdata/data/pr_1981.nc time: 13.059367179870605
url: https://www.northwestknowledge.net/metdata/data/pr_1982.nc time: 12.232381582260132
Total time: 53.15849542617798

Mất từ ​​11 đến 16 giây để tải xuống các tệp riêng lẻ. Tổng thời gian tải xuống là ít hơn một phút. Thời gian tải xuống của bạn sẽ thay đổi dựa trên kết nối mạng cụ thể của bạn.

Hãy để so sánh cách tiếp cận nối tiếp (vòng lặp) này với cách tiếp cận song song dưới đây.

Để bắt đầu, hãy tạo một hàm (

fns = [r'C:\Users\konrad\Downloads\pr_1979.nc',
r'C:\Users\konrad\Downloads\pr_1980.nc',
r'C:\Users\konrad\Downloads\pr_1981.nc',
r'C:\Users\konrad\Downloads\pr_1982.nc']
8) để xử lý tải xuống song song. Hàm (
fns = [r'C:\Users\konrad\Downloads\pr_1979.nc',
r'C:\Users\konrad\Downloads\pr_1980.nc',
r'C:\Users\konrad\Downloads\pr_1981.nc',
r'C:\Users\konrad\Downloads\pr_1982.nc']
8) sẽ lấy một đối số, một URL có thể sử dụng và tên tệp liên quan (biến
fns = [r'C:\Users\konrad\Downloads\pr_1979.nc',
r'C:\Users\konrad\Downloads\pr_1980.nc',
r'C:\Users\konrad\Downloads\pr_1981.nc',
r'C:\Users\konrad\Downloads\pr_1982.nc']
6 mà chúng tôi đã tạo trước đó).

Tiếp theo, có được số lượng CPU có sẵn để xử lý. Điều này sẽ xác định số lượng luồng để chạy song song.

Bây giờ sử dụng

urls = ['https://www.northwestknowledge.net/metdata/data/pr_1979.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1980.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1981.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1982.nc']
1
inputs = zip(urls, fns)
2 để ánh xạ
fns = [r'C:\Users\konrad\Downloads\pr_1979.nc',
r'C:\Users\konrad\Downloads\pr_1980.nc',
r'C:\Users\konrad\Downloads\pr_1981.nc',
r'C:\Users\konrad\Downloads\pr_1982.nc']
6 cho hàm
urls = ['https://www.northwestknowledge.net/metdata/data/pr_1979.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1980.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1981.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1982.nc']
8. Ở đây chúng tôi sử dụng phương pháp
inputs = zip(urls, fns)
5 của
inputs = zip(urls, fns)
2 và chuyển nó hàm
urls = ['https://www.northwestknowledge.net/metdata/data/pr_1979.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1980.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1981.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1982.nc']
8 và các đối số đầu vào cho
urls = ['https://www.northwestknowledge.net/metdata/data/pr_1979.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1980.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1981.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1982.nc']
8 (biến
fns = [r'C:\Users\konrad\Downloads\pr_1979.nc',
r'C:\Users\konrad\Downloads\pr_1980.nc',
r'C:\Users\konrad\Downloads\pr_1981.nc',
r'C:\Users\konrad\Downloads\pr_1982.nc']
6). Phương thức
inputs = zip(urls, fns)
5 sẽ chạy đồng thời
urls = ['https://www.northwestknowledge.net/metdata/data/pr_1979.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1980.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1981.nc',
'https://www.northwestknowledge.net/metdata/data/pr_1982.nc']
8 cho số lượng luồng được chỉ định (nghĩa là tải xuống song song).

Do đó, nếu chúng tôi có bốn tệp và bốn luồng, tất cả các tệp có thể được tải xuống cùng một lúc thay vì chờ một lần tải xuống hoàn thành trước khi bắt đầu tiếp theo. Điều này có thể tiết kiệm một lượng đáng kể thời gian xử lý.

Trong phần cuối cùng của hàm

fns = [r'C:\Users\konrad\Downloads\pr_1979.nc',
r'C:\Users\konrad\Downloads\pr_1980.nc',
r'C:\Users\konrad\Downloads\pr_1981.nc',
r'C:\Users\konrad\Downloads\pr_1982.nc']
8, các URL đã tải xuống và thời gian cần thiết để tải xuống mỗi URL được in.

def download_parallel(args):
    cpus = cpu_count()
    results = ThreadPool(cpus - 1).imap_unordered(download_url, args)
    for result in results:
        print('url:', result[0], 'time (s):', result[1])

Khi

fns = [r'C:\Users\konrad\Downloads\pr_1979.nc',
r'C:\Users\konrad\Downloads\pr_1980.nc',
r'C:\Users\konrad\Downloads\pr_1981.nc',
r'C:\Users\konrad\Downloads\pr_1982.nc']
6 và
fns = [r'C:\Users\konrad\Downloads\pr_1979.nc',
r'C:\Users\konrad\Downloads\pr_1980.nc',
r'C:\Users\konrad\Downloads\pr_1981.nc',
r'C:\Users\konrad\Downloads\pr_1982.nc']
8 được xác định, các tệp có thể được tải xuống song song với một dòng mã duy nhất.

download_parallel(inputs)

Output:

url: https://www.northwestknowledge.net/metdata/data/pr_1980.nc time (s): 14.641696214675903
url: https://www.northwestknowledge.net/metdata/data/pr_1981.nc time (s): 14.789752960205078
url: https://www.northwestknowledge.net/metdata/data/pr_1979.nc time (s): 15.052601337432861
url: https://www.northwestknowledge.net/metdata/data/pr_1982.nc time (s): 23.287317752838135
Total time: 23.32273244857788

Lưu ý rằng phải mất nhiều thời gian hơn để tải xuống từng tệp riêng lẻ với cách tiếp cận. Đây có thể là kết quả của việc thay đổi tốc độ mạng hoặc chi phí cần thiết để ánh xạ các bản tải xuống cho các luồng tương ứng của chúng. Mặc dù các tệp riêng lẻ mất nhiều thời gian hơn để tải xuống, phương pháp song song dẫn đến giảm 50% trong tổng thời gian tải xuống.

Bạn có thể thấy cách xử lý song song có thể giảm đáng kể thời gian xử lý cho nhiều tệp. Khi số lượng tệp tăng lên, bạn sẽ tiết kiệm nhiều thời gian hơn bằng cách sử dụng phương pháp tải xuống song song.

Sự kết luận

Tự động hóa tệp trong các thói quen phát triển và phân tích của bạn có thể giúp bạn tiết kiệm rất nhiều thời gian. Như được chứng minh bằng hướng dẫn này, việc triển khai thói quen tải xuống song song có thể giảm đáng kể thời gian thu thập tệp nếu bạn yêu cầu nhiều tệp hoặc tệp lớn.

Tìm hiểu GIS từ các chuyên gia trong ngành

Cho dù bạn đang tìm cách đưa các kỹ năng GIS của bạn lên một tầm cao mới, hoặc chỉ bắt đầu với GIS, chúng tôi có một khóa học cho bạn! Chúng tôi liên tục tạo và quản lý nhiều khóa học hơn để giúp bạn cải thiện các kỹ năng không gian địa lý của bạn.

Tất cả các khóa học của chúng tôi được giảng dạy bởi các chuyên gia trong ngành và bao gồm hướng dẫn video từng bước để bạn không bị lạc trong video và bài đăng trên blog, dữ liệu có thể tải xuống để bạn có thể sao chép mọi thứ mà người hướng dẫn làm và mã bạn có thể sao chép để bạn có thể tránh gõ lặp đi lặp lại

Làm cách nào để tải xuống nhiều tệp từ một trang web bằng Python?

Nhập mô -đun. Nhập yêu cầu ..
Nhận liên kết hoặc URL. url = 'https://www.facebook.com/favicon.ico' r = requests.get (url, allow_redirects = true).
Lưu nội dung với tên. Mở ('Facebook.ICO', 'WB'). Viết (R.Content) lưu tệp dưới dạng Facebook. ....
Nhận tên tệp từ một url. Để có được tên tệp, chúng ta có thể phân tích URL ..

Làm cách nào để tải xuống nhiều tệp từ URL?

Các bước cần theo dõi để tải xuống tất cả các tệp từ danh sách các URL như sau:..
Nhấp vào tệp đọc (. ....
Nhấp vào trên thư mục đầu ra để chọn thư mục để lưu tất cả các tệp đã tải xuống ..
Nhấp vào nút Tải xuống bên phải chương trình để tự động tải xuống tất cả các tệp ..

Làm cách nào để tải xuống toàn bộ trang web từ Python?

Bạn có thể dễ dàng làm điều đó với thư viện Python đơn giản Pywebcopy ...
Lưu trang pageFileName .html trên thư mục hiện tại ..
Tải xuống, JavaScripts, CSS và hình ảnh dựa trên tập lệnh thẻ, liên kết và IMG và được lưu trên thư mục pagefilename _files ..
Bất kỳ ngoại lệ nào được in trên sys ..

Làm thế nào để bạn tải xuống nhiều hình ảnh trong Python?

Phương pháp hai: Cách tải xuống nhiều hình ảnh từ nhiều trang web HTML..
Tải xuống nội dung HTML của mỗi trang web ..
Trích xuất tất cả các URL hình ảnh cho mỗi trang ..
Tạo tên tệp ..
Kiểm tra xem mã trạng thái hình ảnh có phải là 200 không ..
Viết tất cả hình ảnh vào máy tính cục bộ của bạn ..