5 начина за преузимање датотека са УРЛ-а користећи Питхон

Желите да преузмете датотеке са УРЛ-а користећи Питхон? Хајде да научимо различите начине да то урадимо.

Када радите на Питхон пројекту, можда ћете морати да преузмете датотеке са веба — са одређене УРЛ адресе.

Можете их ручно преузети у своје радно окружење. Међутим, згодније је преузети датотеке са њихових УРЛ адреса програмски у оквиру Питхон скрипте.

У овом водичу ћемо покрити различите начине преузимања датотека са веба помоћу Питхон-а — користећи уграђене Питхон пакете и пакете треће стране.

Како користити Питхон за преузимање датотека са УРЛ-а

Ако сте упознати са Питхон-ом, наишли бисте на овај популарни КСКЦД Питхон стрип:

Питхон цомиц | Извор: КСКЦД

Као пример, покушаћемо да преузмемо ову КСКЦД стрип слику (.пнг екстензија) ПНГ слику у наш радни директоријум користећи различите методе.

Током читавог туторијала, радићемо са неколико Питхон пакета независних произвођача. Инсталирајте их све у наменском виртуелном окружењу за ваш пројекат.

Коришћење урллиб.рекуест

Можете користити уграђени Питхон урллиб.рекуест модул за преузимање датотека са УРЛ адресе. Овај уграђени модул долази са функционалношћу за прављење ХТТП захтева и руковање УРЛ адресама. Пружа једноставан начин за интеракцију са веб ресурсима, подржавајући задатке попут преузимања података са веб локација.

Хајде да преузмемо КСКЦД Питхон стрип са његовог УРЛ-а користећи урллиб.рекуест:

import urllib.request

url="https://imgs.xkcd.com/comics/python.png"
urllib.request.urlretrieve(url, 'xkcd_comic.png')

Овде радимо следеће:

  • Увезите модул урллиб.рекуест.
  • Подесите УРЛ слике КСКЦД Питхон стрипа.
  • Користите урллиб.рекуест.урлретриеве да преузмете слику и сачувате је као ‘ккцд_цомиц.пнг’ у тренутном директоријуму.

Ако сада покренете команду лс на терминалу да видите садржај тренутног директоријума, видећете датотеку ‘ккцд_цомиц.пнг’:

Коришћење библиотеке захтева

Тхе Захтева библиотеку је популаран и један од најчешће преузиманих Питхон пакета. Можете да шаљете ХТТП захтеве преко веба и преузимате садржај.

Прво инсталирајте библиотеку захтева:

pip install requests

Ако сте креирали нову Питхон скрипту у истом директоријуму, избришите ‘ккцд_цомиц.пнг’ пре него што покренете тренутну скрипту.

import requests

url="https://imgs.xkcd.com/comics/python.png"
response = requests.get(url)

with open('xkcd_comic.png', 'wb') as file:
	file.write(response.content)

Хајде да разложимо шта смо урадили у овом приступу:

  • Увезите библиотеку захтева.
  • Подесите УРЛ слике КСКЦД Питхон стрипа.
  • Пошаљите ГЕТ захтев на УРЛ користећи рекуестс.гет.
  • Сачувајте садржај одговора (податке о слици) као ‘ккцд_цомиц.пнг’ у бинарном режиму писања.

И требало би да видите преузету слику када одштампате садржај директоријума:

Коришћење урллиб3

Видели смо како се користи уграђени урллиб.рекуест. Али можете користити и Питхон пакет урллиб3 треће стране.

Урллиб3 је Питхон библиотека за прављење ХТТП захтева и управљање везама на поузданији и ефикаснији начин од уграђеног урллиб модула. Пружа функције као што су прикупљање веза, поновни покушаји захтева и безбедност нити, што га чини робусним избором за руковање ХТТП комуникацијом у Питхон апликацијама.

Инсталирајте урллиб3 користећи пип:

pip install urllib3

Сада хајде да преузмемо КСКЦД Питхон стрип користећи урллиб библиотеку:

import urllib3

# URL of the XKCD comic image
url="https://imgs.xkcd.com/comics/python.png"

# Create a PoolManager instance
http = urllib3.PoolManager()

# Send an HTTP GET request to the URL
response = http.request('GET', url)

# Retrieve the content (image data)
image_data = response.data

# Specify the file name to save the comic as
file_name="xkcd_comic.png"

# Save the image data
with open(file_name, 'wb') as file:
	file.write(image_data)

Чини се да је овај приступ више укључен од претходних приступа који користе урллиб.рекуестс и библиотеку захтева. Дакле, хајде да разбијемо различите кораке:

  • Почињемо увозом урллиб3 модула, који пружа функционалност за прављење ХТТП захтева.
  • Затим наводимо УРЛ слике КСКЦД стрипа.
  • Затим креирамо инстанцу урллиб3.ПоолМанагер(). Овај објекат управља скупом веза и омогућава нам да правимо ХТТП захтеве.
  • Затим користимо метод хттп.рекуест(‘ГЕТ’, урл) да пошаљемо ХТТП ГЕТ захтев на наведени УРЛ. Овај захтев преузима садржај КСКЦД стрипа.
  • Када је захтев успешан, преузимамо садржај (податке о слици) из ХТТП одговора користећи респонсе.дата.
  • Коначно, записујемо податке о слици (преузете из одговора) у датотеку.

Када покренете своју Питхон скрипту, требало би да добијете следећи излаз:

Коришћење вгет-а

Тхе вгет Питхон библиотека поједностављује преузимање датотека са УРЛ адреса. Можете га користити за преузимање веб ресурса и посебно је згодан за аутоматизацију задатака преузимања.

Можете да инсталирате вгет библиотеку користећи пип, а затим да користите њене функције за преузимање датотека са УРЛ адреса:

pip install wget

Овај исечак користи вгет модул да преузме КСКЦД Питхон стрип и сачува га као ‘ккцд_цомиц.пнг’ у радном директоријуму:

import wget

url="https://imgs.xkcd.com/comics/python.png"
wget.download(url, 'xkcd_comic.png')

овде:

  • Увозимо вгет модул.
  • Подесите УРЛ слике КСКЦД Питхон стрипа.
  • Користите вгет.довнлоад да преузмете слику и сачувате је као ‘ккцд_цомиц.пнг’ у тренутном директоријуму.

Када преузмете КСКЦД стрип користећи вгет, требало би да видите сличан излаз:

Коришћење ПиЦУРЛ

Ако сте користили Линук машину или Мац, можда сте упознати са цУРЛ алатком командне линије за преузимање датотека са веба.

ПиЦУРЛ, Питхон интерфејс за либцурл, је моћан алат за прављење ХТТП захтева. Пружа прецизну контролу над захтевима и можете га користити за напредне случајеве коришћења при руковању веб ресурсима.

Инсталирање пицурл-а у вашем радном окружењу може бити сложено. Покушајте да инсталирате користећи пип:

pip install pycurl

⚠ Ако добијете грешке током процеса, можете проверити ПиЦУРЛ водич за инсталацију за савете за решавање проблема.

Алтернативно, ако имате инсталиран цУРЛ, можете да инсталирате Питхон везе за либцурл на следећи начин:

sudo apt install python3-pycurl

Напомена: Пре него што инсталирате Питхон повезивање, морате да имате инсталиран цУРЛ. Ако немате инсталиран цУРЛ на вашој машини, можете то учинити овако: апт инсталл цурл.

Преузимање датотека помоћу ПиЦУРЛ

Ево кода за преузимање КСКЦД стрипа користећи ПиЦУРЛ:

import pycurl
from io import BytesIO

# URL of the XKCD Python comic
url="https://imgs.xkcd.com/comics/python.png"

# Create a Curl object
c = pycurl.Curl()

# Set the URL
c.setopt(pycurl.URL, url)

# Create a BytesIO object to store the downloaded data
buffer = BytesIO()
c.setopt(pycurl.WRITEDATA, buffer)

# Perform the request
c.perform()

# Check if the request was successful (HTTP status code 200)
http_code = c.getinfo(pycurl.HTTP_CODE)
if http_code == 200:
    # Save the downloaded data to a file
    with open('xkcd_comic.png', 'wb') as f:
        f.write(buffer.getvalue())

# Close the Curl object
c.close()

Хајде да поделимо већи исечак на мање исечке кода за сваки корак:

Корак 1: Увезите потребне модуле

Прво, увозимо пицурл да бисмо га могли користити за прављење ХТТП захтева. Затим увозимо БитесИО из ио модул да креирате бафер за чување преузетих података:

import pycurl
from io import BytesIO

Корак 2: Направите Цурл објекат и поставите УРЛ

Наводимо УРЛ КСКЦД Питхон стрипа који желимо да преузмемо. И креирајте цурл објекат, који представља ХТТП захтев. Затим постављамо УРЛ за Цурл објекат користећи ц.сетопт(пицурл.УРЛ, урл):

# URL of the XKCD Python comic
url="https://imgs.xkcd.com/comics/python.png"

# Create a Curl object
c = pycurl.Curl()

# Set the URL
c.setopt(pycurl.URL, url)

Корак 3: Креирајте БитесИО објекат и поставите опцију ВРИТЕДАТА

Креирамо БитесИО објекат за складиштење преузетих података и конфигуришемо Цурл објекат да упише податке одговора у наш бафер користећи ц.сетопт(пицурл.ВРИТЕДАТА, бафер):

# Create a BytesIO object to store the downloaded data
buffer = BytesIO()
c.setopt(pycurl.WRITEDATA, buffer)

Корак 4: Извршите захтев

Извршите ХТТП захтев користећи ц.перформ() и преузмите податке о стриповима:

# Perform the request
c.perform()

Корак 5: Проверите ХТТП статусни код и сачувајте преузете податке

Добијамо ХТТП статусни код користећи ц.гетинфо(пицурл.ХТТП_ЦОДЕ) да бисмо били сигурни да је захтев успешан (ХТТП код 200). Ако је ХТТП статусни код 200, уписујемо податке из бафера у датотеку слике:

# Check if the request was successful (HTTP status code 200)
http_code = c.getinfo(pycurl.HTTP_CODE)
if http_code == 200:
    # Save the downloaded data to a file
    with open('xkcd_comic.png', 'wb') as f:
        f.write(buffer.getvalue())

Корак 6: Затворите Цурл објекат

Коначно, затварамо цурл објекат користећи ц.цлосе() да очистимо ресурсе:

# Close the Curl object
c.close()

Како преузети велике датотеке у мањим деловима

До сада смо видели различите начине за преузимање КСКЦД Питхон стрипа — мале датотеке слике — у тренутни директоријум.

Међутим, можда ћете желети да преузмете много веће датотеке као што су инсталатери за ИДЕ и још много тога. Када преузимате тако велике датотеке, корисно је да их преузмете у мањим деловима и такође пратите напредак како се преузимање одвија. За ово можемо да користимо функционалност библиотеке захтева.

Хајде да користимо захтеве за преузимање ВС Цоде инсталатер у комадима величине 1 МБ:

import requests

# URL of the Visual Studio Code installer EXE file
url="https://code.visualstudio.com/sha/download?build=stable&os=win32-x64-user"

# Chunk size for downloading 
chunk_size = 1024 * 1024  # 1 MB chunks

response = requests.get(url, stream=True)

# Determine the total file size from the Content-Length header
total_size = int(response.headers.get('content-length', 0))

with open('vs_code_installer.exe', 'wb') as file:
    for chunk in response.iter_content(chunk_size):
        if chunk:
            file.write(chunk)
            file_size = file.tell()  # Get the current file size
            print(f'Downloading... {file_size}/{total_size} bytes', end='\r')

print('Download complete.')

овде:

  • Поставили смо `цхунк_сизе` да бисмо одредили величину сваког комада (1 МБ у овом примеру).
  • Затим користимо рекуестс.гет са стреам=Труе да стримујемо садржај одговора без учитавања целе датотеке у меморију одједном.
  • Сваки део чувамо у датотеци узастопно како се преузима.

Како се преузимање настави, видећете број тренутно преузетих бајтова/укупан број бајтова:

Након што се преузимање заврши, требало би да видите поруку „Преузимање је завршено“:

И требало би да видите инсталатер ВС кода у вашем директоријуму:

Окончање

Надам се да сте научили неколико различитих начина за преузимање датотека са УРЛ адреса користећи Питхон. Поред уграђеног урллиб.рекуест, покрили смо популарне Питхон пакете независних произвођача као што су рекуестс, урллиб3, вгет и ПуЦУРЛ.

Као програмер, користио сам библиотеку захтева више од других у својим пројектима за преузимање датотека и рад са веб АПИ-јима уопште. Али друге методе такође могу бити корисне у зависности од сложености задатка преузимања и нивоа грануларности који вам је потребан за ХТТП захтеве. Срећно преузимање!