বেসিক HTTP ফাইল ডাউনলোড করা এবং পাইথনে ডিস্কে সংরক্ষণ করা?


159

আমি পাইথনে নতুন এবং আমার প্রশ্নের উত্তরের জন্য আমি এই সাইটে প্রশ্নোত্তর দিয়ে যাচ্ছি। তবে আমি একজন শিক্ষানবিস এবং এর সমাধানগুলির কয়েকটি বুঝতে আমার অসুবিধা হয়েছে। আমার খুব প্রাথমিক সমাধান দরকার।

কেউ দয়া করে 'HTTP- র মাধ্যমে কোনও ফাইল ডাউনলোড করা' এবং 'এটি ডিস্কে, উইন্ডোজে সেভ করা' এর সহজ সমাধানটি আমাকে ব্যাখ্যা করতে পারেন?

আমি জানি না কীভাবে শুটিল এবং ওএস মডিউলগুলি ব্যবহার করবেন।

আমি যে ফাইলটি ডাউনলোড করতে চাইছি তা 500 এমবি এর নীচে এবং একটি .gz সংরক্ষণাগার ফাইল I যদি কেউ কীভাবে সংরক্ষণাগারটি বের করতে এবং এতে ফাইলগুলিও ব্যবহার করতে হয় তা ব্যাখ্যা করতে পারেন, এটি দুর্দান্ত!

এখানে একটি আংশিক সমাধান, যা আমি বিভিন্ন উত্তর থেকে মিলিত লিখেছিলাম:

import requests
import os
import shutil

global dump

def download_file():
    global dump
    url = "http://randomsite.com/file.gz"
    file = requests.get(url, stream=True)
    dump = file.raw

def save_file():
    global dump
    location = os.path.abspath("D:\folder\file.gz")
    with open("file.gz", 'wb') as location:
        shutil.copyfileobj(dump, location)
    del dump

কেউ কি ত্রুটিগুলি (প্রাথমিক স্তরের) নির্দেশ করতে পারে এবং এটি করার জন্য কোনও সহজ পদ্ধতি ব্যাখ্যা করতে পারে?

ধন্যবাদ!

উত্তর:


207

একটি ফাইল ডাউনলোড করার একটি পরিষ্কার উপায় হ'ল:

import urllib

testfile = urllib.URLopener()
testfile.retrieve("http://randomsite.com/file.gz", "file.gz")

এটি কোনও ওয়েবসাইট থেকে একটি ফাইল ডাউনলোড করে নাম দেয় file.gzUrllib এবং পাইথনের মাধ্যমে ছবি ডাউনলোড করা থেকে শুরু করে এটি আমার প্রিয় সমাধানগুলির মধ্যে একটি

এই উদাহরণটি urllibগ্রন্থাগারটি ব্যবহার করে এবং এটি সরাসরি একটি উত্স ফর্ম পুনরুদ্ধার করবে।


3
ঠিক আছে ধন্যবাদ! তবে কী এটির অনুরোধের মাধ্যমে কাজ করার কোনও উপায় আছে?
arvindch

5
/Myfolder/file.gz এ সংরক্ষণ করার কোনও সম্ভাবনা?
জন স্নো

17
নিজে চেষ্টা করার চেয়ে ভাল আর কোন সম্ভাবনা নেই? :) আমি সফলভাবে করতে পারে testfile.retrieve("http://example.com/example.rpm", "/tmp/test.rpm")
ধর্মিত

18
পাইথন ৩.৩ থেকে এটিকে অবজ্ঞা করা হয়েছে, এবং urllib.request.urlretrieve সমাধান (নীচের উত্তর দেখুন) হল 'আধুনিক' উপায়
মিশিগেলবি

1
এই কোডটিতে একটি ব্যবহারকারীর নাম এবং পাসওয়ার্ড যুক্ত করার সর্বোত্তম উপায় কী? tks
Estefy

110

যেমনটি এখানে উল্লেখ করা হয়েছে :

import urllib
urllib.urlretrieve ("http://randomsite.com/file.gz", "file.gz")

EDIT:আপনি যদি এখনও অনুরোধগুলি ব্যবহার করতে চান তবে এই প্রশ্নটি বা এটিটি একবার দেখুন


1
urllib কাজ করবে, তবে, অনেকে urllib এর মাধ্যমে অনুরোধগুলি ব্যবহারের পরামর্শ দিচ্ছেন বলে মনে হয়। এটা কেন?
arvindch

2
requestsurllibএকটি REST এপিআই এর সাথে কাজ করার সাথে তুলনা করে অত্যন্ত সহায়ক । যদি না আপনি আরও অনেক কিছু করতে চাইছেন তবে এটি ভাল হওয়া উচিত।
dparpyani

ঠিক আছে, এখন আমি অনুরোধগুলি ব্যবহারের জন্য আপনার সরবরাহিত লিঙ্কগুলি পড়েছি। ডাউনলোড সাশ্রয়ের জন্য ফাইলের পথ কীভাবে ঘোষণা করবেন সে সম্পর্কে আমি বিভ্রান্ত। আমি কীভাবে এর জন্য ওএস এবং শুটিল ব্যবহার করব?
arvindch

62
পাইথন 3 এর জন্য:import urllib.request urllib.request.urlretrieve(url, filename)
ফ্ল্যাশ

1
ডাউনলোডটি ব্যর্থ হলে আমি
এটির সাথে এইচএসপি

34

আমি ব্যবহার wget হয়

সহজ এবং ভাল লাইব্রেরী আপনি উদাহরণ দিতে চান?

import wget

file_url = 'http://johndoe.com/download.zip'

file_name = wget.download(file_url)

উইজেট মডিউল পাইথন 2 এবং পাইথন 3 সংস্করণ সমর্থন করে


33

উইজেট, urllib এবং অনুরোধ ব্যবহার করে চারটি পদ্ধতি।

#!/usr/bin/python
import requests
from StringIO import StringIO
from PIL import Image
import profile as profile
import urllib
import wget


url = 'https://tinypng.com/images/social/website.jpg'

def testRequest():
    image_name = 'test1.jpg'
    r = requests.get(url, stream=True)
    with open(image_name, 'wb') as f:
        for chunk in r.iter_content():
            f.write(chunk)

def testRequest2():
    image_name = 'test2.jpg'
    r = requests.get(url)
    i = Image.open(StringIO(r.content))
    i.save(image_name)

def testUrllib():
    image_name = 'test3.jpg'
    testfile = urllib.URLopener()
    testfile.retrieve(url, image_name)

def testwget():
    image_name = 'test4.jpg'
    wget.download(url, image_name)

if __name__ == '__main__':
    profile.run('testRequest()')
    profile.run('testRequest2()')
    profile.run('testUrllib()')
    profile.run('testwget()')

testRequest - 44.279 সেকেন্ডে 4469882 ফাংশন কল (4469842 আদিম কল)

testRequest2 - 8580 ফাংশন কল (8574 আদিম কল) 0.072 সেকেন্ডে

পরীক্ষাউর্লিব - ০.০3636 সেকেন্ডে 3810 ফাংশন কল (3775 আদিম কল)

পরীক্ষা উইজেট - 0.020 সেকেন্ডে 3489 ফাংশন কল


1
আপনি কীভাবে ফাংশন কলগুলির নম্বর পেয়েছেন?
আবদেলহাক

29

জন্য Python3 + + URLopener অসমর্থিত হয়েছে। এবং ব্যবহৃত হলে আপনি নীচের মত ত্রুটি পাবেন:

url_opener = urllib. URLopener () AttributeError: মডিউল 'urllib' এর কোনও 'ইউআরএলওপেনার' নেই

তাই চেষ্টা করুন:

import urllib.request 
urllib.request.urlretrieve(url, filename)

1
অদ্ভুত ... পাইথন 2
অবমূল্যায়িত

1
একমত! আমি আমার সমাধানগুলি আগের সমাধানগুলিতে টানছিলাম। আমি 200 বার upvote করতে চান!
ইয়েহেল কে

5

এক্সটিক উইন্ডোজ সলিউশন

import subprocess

subprocess.run("powershell Invoke-WebRequest {} -OutFile {}".format(your_url, filename), shell=True)

1

আমি এই পথটি শুরু করেছি কারণ এসএসসি'র উইজেটটি এসএসএল দ্বারা সংকলিত হয়নি এবং আমি বিশ্বের অন্যদিকে অবস্থিত সরাসরি ইসএসআই হোস্টের কাছে একটি বিক্রেতার ওয়েবসাইট থেকে একটি ওভিএ ডাউনলোড করতে চেয়েছিলাম।

আমাকে ফায়ারওয়াল (অলস) অক্ষম করতে হয়েছিল / নিয়মগুলি সম্পাদন করে https আউট করতে সক্ষম হয়েছিল (যথাযথ)

পাইথন স্ক্রিপ্ট তৈরি করেছে:

import ssl
import shutil
import tempfile
import urllib.request
context = ssl._create_unverified_context()

dlurl='https://somesite/path/whatever'
with urllib.request.urlopen(durl, context=context) as response:
    with open("file.ova", 'wb') as tmp_file:
        shutil.copyfileobj(response, tmp_file)

ESXi লাইব্রেরিগুলি এক ধরণের যুক্ত হয়ে গেছে তবে ওপেন সোর্স উইজেল ইনস্টলারটি https এর জন্য urllib ব্যবহার করেছে বলে মনে হয়েছিল ... সুতরাং এটি আমাকে এই পথে যেতে অনুপ্রাণিত করেছিল


-5

ফাইলটি সংরক্ষণের আরেকটি পরিষ্কার উপায় হ'ল:

import csv
import urllib

urllib.retrieve("your url goes here" , "output.csv")

এটি সম্ভবত আপনি urllib.urlretrieveবা urllib.URLopener().retrieveএখানে বোঝাতে চেয়েছিলেন তা অস্পষ্ট হওয়া উচিত ।
mateor

9
আপনি কেবল একটি ফাইলের নাম দিচ্ছেন কেন আপনি সিএসভি আমদানি করবেন?
আজিজাহ এম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.