Πώς μπορώ να κατεβάσετε ένα αρχείο μέσω HTTP χρησιμοποιώντας Python;

ψήφοι
678

Έχω ένα μικρό βοηθητικό πρόγραμμα που μπορώ να χρησιμοποιήσω για να κατεβάσετε MP3 από μια ιστοσελίδα σε ένα πρόγραμμα και, στη συνέχεια, δημιουργεί / ενημερώνει ένα αρχείο XML το podcast που έχω προφανώς προστέθηκε στο iTunes.

Η επεξεργασία κειμένου που δημιουργεί / ενημερώνει το αρχείο XML είναι γραμμένο σε Python. Χρησιμοποιώ wget μέσα σε έναν υπολογιστή με Windows .batαρχείο για να κατεβάσετε το πραγματικό MP3 όμως. Θα προτιμούσα να έχω όλο το βοηθητικό πρόγραμμα γραμμένο σε Python όμως.

Αγωνίστηκα όμως να βρούμε έναν τρόπο για να φορτώσει στην πραγματικότητα κάτω από το αρχείο Python, γι 'αυτό και κατέφυγε wget.

Έτσι, πώς μπορώ να κατεβάσω το αρχείο χρησιμοποιώντας Python;

Δημοσιεύθηκε 22/08/2008 στις 16:34
πηγή χρήστη
Σε άλλες γλώσσες...                            


24 απαντήσεις

ψήφοι
382

Στην Python 2, χρησιμοποιήστε urllib2 που έρχεται με το πρότυπο βιβλιοθήκης.

import urllib2
response = urllib2.urlopen('http://www.example.com/')
html = response.read()

Αυτός είναι ο πιο βασικός τρόπος για να χρησιμοποιήσει τη βιβλιοθήκη, μείον οποιαδήποτε αντιμετώπιση των λαθών. Μπορείτε επίσης να κάνετε πιο πολύπλοκες πράγματα όπως η αλλαγή κεφαλίδες. Η τεκμηρίωση μπορεί να βρεθεί εδώ.

Απαντήθηκε 22/08/2008 στις 16:38
πηγή χρήστη

ψήφοι
145
import urllib2
mp3file = urllib2.urlopen("http://www.example.com/songs/mp3.mp3")
with open('test.mp3','wb') as output:
  output.write(mp3file.read())

Η wbκατά open('test.mp3','wb')ανοίγει ένα αρχείο (και διαγράφει οποιοδήποτε υπάρχον αρχείο) σε δυαδική κατάσταση, ώστε να μπορείτε να αποθηκεύσετε τα δεδομένα με αυτό αντί μόνο κείμενο.

Απαντήθηκε 22/08/2008 στις 16:58
πηγή χρήστη

ψήφοι
12

Συμφωνώ με τον Corey, urllib2 είναι πιο πλήρης από urllib και θα πρέπει πιθανώς να είναι η μονάδα που χρησιμοποιείται, αν θέλετε να κάνετε πιο περίπλοκα πράγματα, αλλά για να κάνουν τις απαντήσεις πιο ολοκληρωμένη, urllib είναι μια απλούστερη μονάδα, αν θέλετε μόνο τα βασικά:

import urllib
response = urllib.urlopen('http://www.example.com/sound.mp3')
mp3 = response.read()

Θα δουλεύουν μια χαρά. Ή, αν δεν θέλετε να ασχοληθεί με το αντικείμενο «απάντηση» μπορείτε να καλέσετε διαβάσετε () άμεσα:

import urllib
mp3 = urllib.urlopen('http://www.example.com/sound.mp3').read()
Απαντήθηκε 22/08/2008 στις 16:58
πηγή χρήστη

ψήφοι
926

Μία ακόμη, με τη χρήση urlretrieve:

import urllib
urllib.urlretrieve ("http://www.example.com/songs/mp3.mp3", "mp3.mp3")

(Για την Python 3+ χρησιμοποιούν 'urllib.request εισαγωγής' και urllib.request.urlretrieve)

Ακόμα ένα άλλο, με ένα «progressbar»

import urllib2

url = "http://download.thinkbroadband.com/10MB.zip"

file_name = url.split('/')[-1]
u = urllib2.urlopen(url)
f = open(file_name, 'wb')
meta = u.info()
file_size = int(meta.getheaders("Content-Length")[0])
print "Downloading: %s Bytes: %s" % (file_name, file_size)

file_size_dl = 0
block_sz = 8192
while True:
    buffer = u.read(block_sz)
    if not buffer:
        break

    file_size_dl += len(buffer)
    f.write(buffer)
    status = r"%10d  [%3.2f%%]" % (file_size_dl, file_size_dl * 100. / file_size)
    status = status + chr(8)*(len(status)+1)
    print status,

f.close()
Απαντήθηκε 22/08/2008 στις 17:19
πηγή χρήστη

ψήφοι
286

Το 2012, χρησιμοποιήστε τη βιβλιοθήκη αιτήματα πύθωνα

>>> import requests
>>> 
>>> url = "http://download.thinkbroadband.com/10MB.zip"
>>> r = requests.get(url)
>>> print len(r.content)
10485760

Μπορείτε να εκτελέσετε pip install requestsγια να το πάρει.

Αιτήσεις έχει πολλά πλεονεκτήματα σε σχέση με τις εναλλακτικές λύσεις γιατί το API είναι πολύ πιο απλή. Αυτό ισχύει ιδιαίτερα εάν έχετε να κάνετε έλεγχο ταυτότητας. urllib και urllib2 είναι αρκετά unintuitive και επώδυνη σε αυτή την περίπτωση.


30/12/2015

Οι άνθρωποι έχουν εκφράσει το θαυμασμό για τη γραμμή προόδου. Είναι δροσερό, σίγουρα. Υπάρχουν αρκετές λύσεις off-the-shelf τώρα, συμπεριλαμβανομένων tqdm:

from tqdm import tqdm
import requests

url = "http://download.thinkbroadband.com/10MB.zip"
response = requests.get(url, stream=True)

with open("10MB", "wb") as handle:
    for data in tqdm(response.iter_content()):
        handle.write(data)

Αυτή είναι ουσιαστικά η εφαρμογή @kvance περιγράφονται 30 μήνες πριν.

Απαντήθηκε 24/05/2012 στις 21:08
πηγή χρήστη

ψήφοι
18

Μια βελτιωμένη έκδοση του κώδικα PabloG για Python 2/3:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import ( division, absolute_import, print_function, unicode_literals )

import sys, os, tempfile, logging

if sys.version_info >= (3,):
    import urllib.request as urllib2
    import urllib.parse as urlparse
else:
    import urllib2
    import urlparse

def download_file(url, dest=None):
    """ 
    Download and save a file specified by url to dest directory,
    """
    u = urllib2.urlopen(url)

    scheme, netloc, path, query, fragment = urlparse.urlsplit(url)
    filename = os.path.basename(path)
    if not filename:
        filename = 'downloaded.file'
    if dest:
        filename = os.path.join(dest, filename)

    with open(filename, 'wb') as f:
        meta = u.info()
        meta_func = meta.getheaders if hasattr(meta, 'getheaders') else meta.get_all
        meta_length = meta_func("Content-Length")
        file_size = None
        if meta_length:
            file_size = int(meta_length[0])
        print("Downloading: {0} Bytes: {1}".format(url, file_size))

        file_size_dl = 0
        block_sz = 8192
        while True:
            buffer = u.read(block_sz)
            if not buffer:
                break

            file_size_dl += len(buffer)
            f.write(buffer)

            status = "{0:16}".format(file_size_dl)
            if file_size:
                status += "   [{0:6.2f}%]".format(file_size_dl * 100 / file_size)
            status += chr(13)
            print(status, end="")
        print()

    return filename

if __name__ == "__main__":  # Only run if this file is called directly
    print("Testing with 10MB download")
    url = "http://download.thinkbroadband.com/10MB.zip"
    filename = download_file(url)
    print(filename)
Απαντήθηκε 13/05/2013 στις 09:59
πηγή χρήστη

ψήφοι
16

Έγραψε wget βιβλιοθήκη σε καθαρή Python μόνο για το σκοπό αυτό. Είναι αντλείται urlretrieveμε αυτά τα χαρακτηριστικά από την έκδοση 2.0.

Απαντήθηκε 25/09/2013 στις 18:55
πηγή χρήστη

ψήφοι
1

Αυτό μπορεί να είναι λίγο αργά, όμως, είδα κωδικό pabloG και δεν θα μπορούσε να βοηθήσει την προσθήκη ενός os.system ( «CLS») για να φανεί φοβερό! Τσέκαρέ το :

    import urllib2,os

    url = "http://download.thinkbroadband.com/10MB.zip"

    file_name = url.split('/')[-1]
    u = urllib2.urlopen(url)
    f = open(file_name, 'wb')
    meta = u.info()
    file_size = int(meta.getheaders("Content-Length")[0])
    print "Downloading: %s Bytes: %s" % (file_name, file_size)
    os.system('cls')
    file_size_dl = 0
    block_sz = 8192
    while True:
        buffer = u.read(block_sz)
        if not buffer:
            break

        file_size_dl += len(buffer)
        f.write(buffer)
        status = r"%10d  [%3.2f%%]" % (file_size_dl, file_size_dl * 100. / file_size)
        status = status + chr(8)*(len(status)+1)
        print status,

    f.close()

Αν λειτουργεί σε ένα περιβάλλον διαφορετικό από τα Windows, θα πρέπει να χρησιμοποιήσετε κάτι άλλο στη συνέχεια «CLS». Σε MAC OS X και Linux θα πρέπει να είναι «σαφής».

Απαντήθηκε 14/10/2013 στις 03:54
πηγή χρήστη

ψήφοι
2

Ο πηγαίος κώδικας μπορεί να είναι:

import urllib
sock = urllib.urlopen("http://diveintopython.org/")
htmlSource = sock.read()                            
sock.close()                                        
print htmlSource  
Απαντήθηκε 26/11/2013 στις 14:21
πηγή χρήστη

ψήφοι
6

Μπορείτε να πάρετε την ανατροφοδότηση πρόοδο με urlretrieve, καθώς:

def report(blocknr, blocksize, size):
    current = blocknr*blocksize
    sys.stdout.write("\r{0:.2f}%".format(100.0*current/size))

def downloadFile(url):
    print "\n",url
    fname = url.split('/')[-1]
    print fname
    urllib.urlretrieve(url, fname, report)
Απαντήθηκε 26/01/2014 στις 14:12
πηγή χρήστη

ψήφοι
14

χρησιμοποιούν wget ενότητα:

import wget
wget.download('url')
Απαντήθηκε 25/03/2015 στις 12:59
πηγή χρήστη

ψήφοι
60

Python 3

  • urllib.request.urlopen

    import urllib.request
    response = urllib.request.urlopen('http://www.example.com/')
    html = response.read()
    
  • urllib.request.urlretrieve

    import urllib.request
    urllib.request.urlretrieve('http://www.example.com/songs/mp3.mp3', 'mp3.mp3')
    

Python 2

  • urllib2.urlopen(χάρη Corey )

    import urllib2
    response = urllib2.urlopen('http://www.example.com/')
    html = response.read()
    
  • urllib.urlretrieve(χάρη PabloG )

    import urllib
    urllib.urlretrieve('http://www.example.com/songs/mp3.mp3', 'mp3.mp3')
    
Απαντήθηκε 06/08/2015 στις 13:30
πηγή χρήστη

ψήφοι
5

Εάν έχετε εγκαταστήσει το wget, μπορείτε να χρησιμοποιήσετε parallel_sync.

Pip εγκατάσταση parallel_sync

from parallel_sync import wget
urls = ['http://something.png', 'http://somthing.tar.gz', 'http://somthing.zip']
wget.download('/tmp', urls)
# or a single file:
wget.download('/tmp', urls[0], filenames='x.zip', extract=True)

Doc: https://pythonhosted.org/parallel_sync/pages/examples.html

Αυτό είναι αρκετά ισχυρό. Μπορεί να κατεβάσετε τα αρχεία παράλληλα, επαναλάβετε μετά από αποτυχία, και μπορεί ακόμη και να κατεβάσετε τα αρχεία σε έναν απομακρυσμένο υπολογιστή.

Απαντήθηκε 19/11/2015 στις 23:48
πηγή χρήστη

ψήφοι
11

Μετά είναι τα πιο συχνά χρησιμοποιούμενη προσκλήσεις για τη λήψη αρχείων στην Python:

  1. urllib.urlretrieve ('url_to_file', file_name)

  2. urllib2.urlopen('url_to_file')

  3. requests.get(url)

  4. wget.download('url', file_name)

Σημείωση: urlopenκαι urlretrieveβρίσκονται να έχει σχετικά κακή με λήψη μεγάλων αρχείων (μέγεθος> 500 MB). requests.getαποθηκεύει το αρχείο στη μνήμη μέχρι να ολοκληρωθεί η λήψη.

Απαντήθηκε 19/09/2016 στις 12:45
πηγή χρήστη

ψήφοι
0

urlretrieve και requests.get είναι απλή, ωστόσο η όχι πραγματικότητα. Έχω παρατραβηγμένο δεδομένα για τις περιοχές ζευγάρι, συμπεριλαμβανομένου του κειμένου και των εικόνων, οι δύο παραπάνω ίσως λύσει τα περισσότερα από τα καθήκοντα. αλλά για μια πιο καθολική λύση που προτείνουν τη χρήση του urlopen. Όπως περιλαμβάνεται σε Python 3 πρότυπη βιβλιοθήκη, τον κωδικό σας θα μπορούσε να τρέξει σε οποιοδήποτε μηχάνημα που τρέχει Python 3 χωρίς προ-εγκατάσταση το site-par

import urllib.request
url_request = urllib.request.Request(url, headers=headers)
url_connect = urllib.request.urlopen(url_request)
len_content = url_content.length

#remember to open file in bytes mode
with open(filename, 'wb') as f:
    while True:
        buffer = url_connect.read(buffer_size)
        if not buffer: break

        #an integer value of size of written data
        data_wrote = f.write(buffer)

#you could probably use with-open-as manner
url_connect.close()

Αυτή η απάντηση παρέχει μια λύση για HTTP 403 Απαγορευμένη κατά τη λήψη αρχείων μέσω HTTP χρησιμοποιώντας την Python. Έχω δοκιμάσει μόνο τα αιτήματα και τις ενότητες urllib, η άλλη μονάδα μπορεί να παρέχει κάτι καλύτερο, αλλά αυτό είναι το ένα που χρησιμοποιείται για να λύσει τα περισσότερα από τα προβλήματα.

Απαντήθηκε 13/03/2017 στις 13:12
πηγή χρήστη

ψήφοι
1

Έγραψα το παρακάτω, το οποίο λειτουργεί σε βανίλια Python 2 ή Python 3.


import sys
try:
    import urllib.request
    python3 = True
except ImportError:
    import urllib2
    python3 = False


def progress_callback_simple(downloaded,total):
    sys.stdout.write(
        "\r" +
        (len(str(total))-len(str(downloaded)))*" " + str(downloaded) + "/%d"%total +
        " [%3.2f%%]"%(100.0*float(downloaded)/float(total))
    )
    sys.stdout.flush()

def download(srcurl, dstfilepath, progress_callback=None, block_size=8192):
    def _download_helper(response, out_file, file_size):
        if progress_callback!=None: progress_callback(0,file_size)
        if block_size == None:
            buffer = response.read()
            out_file.write(buffer)

            if progress_callback!=None: progress_callback(file_size,file_size)
        else:
            file_size_dl = 0
            while True:
                buffer = response.read(block_size)
                if not buffer: break

                file_size_dl += len(buffer)
                out_file.write(buffer)

                if progress_callback!=None: progress_callback(file_size_dl,file_size)
    with open(dstfilepath,"wb") as out_file:
        if python3:
            with urllib.request.urlopen(srcurl) as response:
                file_size = int(response.getheader("Content-Length"))
                _download_helper(response,out_file,file_size)
        else:
            response = urllib2.urlopen(srcurl)
            meta = response.info()
            file_size = int(meta.getheaders("Content-Length")[0])
            _download_helper(response,out_file,file_size)

import traceback
try:
    download(
        "https://geometrian.com/data/programming/projects/glLib/glLib%20Reloaded%200.5.9/0.5.9.zip",
        "output.zip",
        progress_callback_simple
    )
except:
    traceback.print_exc()
    input()

Σημειώσεις:

  • Υποστηρίζει μια «μπάρα προόδου» επανάκλησης.
  • Λήψη είναι 4 MB δοκιμή .zip από την ιστοσελίδα μου.
Απαντήθηκε 13/05/2017 στις 21:33
πηγή χρήστη

ψήφοι
9

Απλή αλλά Python 2 & Python 3συμβατό τρόπο έρχεται με sixτη βιβλιοθήκη:

from six.moves import urllib
urllib.request.urlretrieve("http://www.example.com/songs/mp3.mp3", "mp3.mp3")
Απαντήθηκε 22/06/2017 στις 07:59
πηγή χρήστη

ψήφοι
3

Αν η ταχύτητα έχει σημασία για εσάς, έκανα μια μικρή δοκιμή επιδόσεων για τις ενότητες urllibκαι wget, και όσον αφορά την wgetδοκίμασα μια φορά με γραμμή κατάστασης και μία φορά χωρίς. Πήρα τρία διαφορετικά αρχεία 500MB για να δοκιμάσετε με (διαφορετικά αρχεία-για να εξαλειφθεί η πιθανότητα ότι υπάρχει κάποια προσωρινή αποθήκευση συμβαίνει κάτω από το καπό). Δοκιμάστηκε σε debian μηχάνημα, με python2.

Πρώτον, αυτά είναι τα αποτελέσματα (που είναι παρόμοια σε διαφορετικές διαδρομές):

$ python wget_test.py 
urlretrive_test : starting
urlretrive_test : 6.56
==============
wget_no_bar_test : starting
wget_no_bar_test : 7.20
==============
wget_with_bar_test : starting
100% [......................................................................] 541335552 / 541335552
wget_with_bar_test : 50.49
==============

Ο τρόπος που πραγματοποιείται η δοκιμή είναι με τη χρήση «προφίλ» διακοσμητής. Αυτή είναι η πλήρης κωδικός:

import wget
import urllib
import time
from functools import wraps

def profile(func):
    @wraps(func)
    def inner(*args):
        print func.__name__, ": starting"
        start = time.time()
        ret = func(*args)
        end = time.time()
        print func.__name__, ": {:.2f}".format(end - start)
        return ret
    return inner

url1 = 'http://host.com/500a.iso'
url2 = 'http://host.com/500b.iso'
url3 = 'http://host.com/500c.iso'

def do_nothing(*args):
    pass

@profile
def urlretrive_test(url):
    return urllib.urlretrieve(url)

@profile
def wget_no_bar_test(url):
    return wget.download(url, out='/tmp/', bar=do_nothing)

@profile
def wget_with_bar_test(url):
    return wget.download(url, out='/tmp/')

urlretrive_test(url1)
print '=============='
time.sleep(1)

wget_no_bar_test(url2)
print '=============='
time.sleep(1)

wget_with_bar_test(url3)
print '=============='
time.sleep(1)

urllib φαίνεται να είναι ο ταχύτερος

Απαντήθηκε 03/11/2017 στις 14:25
πηγή χρήστη

ψήφοι
3

Σε python3 μπορείτε να χρησιμοποιήσετε urllib3 και shutil libraires. Κατεβάστε τους με τη χρήση pip ή ΡΙΡ3 (Ανάλογα με το αν python3 είναι προκαθορισμένη ή όχι)

pip3 install urllib3 shutil

Στη συνέχεια, εκτελέστε αυτόν τον κώδικα

import urllib.request
import shutil

url = "http://www.somewebsite.com/something.pdf"
output_file = "save_this_name.pdf"
with urllib.request.urlopen(url) as response, open(output_file, 'wb') as out_file:
    shutil.copyfileobj(response, out_file)

Σημειώστε ότι μπορείτε να κατεβάσετε urllib3, αλλά χρησιμοποιούν urllibτον κωδικό

Απαντήθηκε 08/02/2018 στις 17:30
πηγή χρήστη

ψήφοι
0

γιατί να μην χρησιμοποιούν pycurl, κατασκευή-στην ενότητα για py2 & 3

import pycurl

FILE_DEST = 'pycurl.html'
FILE_SRC = 'http://pycurl.io/'

with open(FILE_DEST, 'wb') as f:
    c = pycurl.Curl()
    c.setopt(c.URL, FILE_SRC)
    c.setopt(c.WRITEDATA, f)
    c.perform()
    c.close()
Απαντήθηκε 08/08/2018 στις 03:51
πηγή χρήστη

ψήφοι
0

Απλά για λόγους πληρότητας, είναι επίσης δυνατό να καλέσει οποιοδήποτε πρόγραμμα για την ανάκτηση αρχείων με χρήση του subprocessπακέτου. Τα προγράμματα αποκλειστικά για την ανάκτηση αρχείων είναι πιο ισχυρή από ό, τι λειτουργίες Python, όπως urlretrieve, π.χ., wgetνα κατεβάσετε τους καταλόγους αναδρομικά ( -R), μπορεί να ασχοληθεί με το FTP, ανακατευθύνσεις, πληρεξούσια HTTP, μπορεί να αποφευχθεί η εκ νέου λήψη υπάρχοντα αρχεία ( -nc), και aria2μπορεί να παραλληλιστεί λήψεις.

import subprocess
subprocess.check_output(['wget', '-O', 'example_output_file.html', 'https://example.com'])

Σε Jupyter Notebook, μπορεί κανείς να καλέσει προγράμματα άμεσα με την !σύνταξη:

!wget -O example_output_file.html https://example.com
Απαντήθηκε 29/08/2018 στις 12:24
πηγή χρήστη

ψήφοι
6
import os,requests
def download(url):
    get_response = requests.get(url,stream=True)
    file_name  = url.split("/")[-1]
    with open(file_name, 'wb') as f:
        for chunk in get_response.iter_content(chunk_size=1024):
            if chunk: # filter out keep-alive new chunks
                f.write(chunk)


download("https://example.com/example.jpg")
Απαντήθηκε 05/11/2018 στις 11:28
πηγή χρήστη

ψήφοι
0

Αργά απάντηση, αλλά python>=3.6μπορείτε να χρησιμοποιήσετε:

import dload
dload.save(url)

Εγκατάσταση dloadμε:

pip3 install dload
Απαντήθηκε 24/02/2020 στις 10:12
πηγή χρήστη

ψήφοι
0

Ήθελα κάνετε λήψη όλων των αρχείων από μια ιστοσελίδα. Προσπάθησα wgetαλλά ήταν αποτυχία γι 'αυτό αποφάσισε για τη διαδρομή Python και βρήκα αυτό το νήμα.

Μετά την ανάγνωση, έχω κάνει μια μικρή εφαρμογή γραμμής εντολών, soupgetδιευρύνοντας με τις εξαιρετικές απαντήσεις της PabloG και Stan και προσθέτοντας μερικές χρήσιμες επιλογές.

Χρησιμοποιεί και BeatifulSoup να εισπράξει όλα τα URL της σελίδας και στη συνέχεια να κατεβάσετε αυτά με την επιθυμητή επέκταση (ες). Τέλος, να κατεβάσετε πολλά αρχεία ταυτόχρονα.

Εδώ είναι:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from __future__ import (division, absolute_import, print_function, unicode_literals)
import sys, os, argparse
from bs4 import BeautifulSoup

# --- insert Stan's script here ---
# if sys.version_info >= (3,): 
#...
#...
# def download_file(url, dest=None): 
#...
#...

# --- new stuff ---
def collect_all_url(page_url, extensions):
    """
    Recovers all links in page_url checking for all the desired extensions
    """
    conn = urllib2.urlopen(page_url)
    html = conn.read()
    soup = BeautifulSoup(html, 'lxml')
    links = soup.find_all('a')

    results = []    
    for tag in links:
        link = tag.get('href', None)
        if link is not None: 
            for e in extensions:
                if e in link:
                    # Fallback for badly defined links
                    # checks for missing scheme or netloc
                    if urlparse.urlparse(link).scheme and urlparse.urlparse(link).netloc:
                        results.append(link)
                    else:
                        results.append(os.path.join(page_url,link))
    return results

if __name__ == "__main__":  # Only run if this file is called directly
    # Command line arguments
    parser = argparse.ArgumentParser(
        description='Download all files from a webpage.')
    parser.add_argument(
        '-u', '--url', 
        help='Page url to request')
    parser.add_argument(
        '-e', '--ext', 
        nargs='+',
        help='Extension(s) to find')    
    parser.add_argument(
        '-d', '--dest', 
        default=None,
        help='Destination where to save the files')
    parser.add_argument(
        '-p', '--par', 
        action='store_true', default=False, 
        help="Turns on parallel download")
    args = parser.parse_args()

    # Recover files to download
    all_links = collect_all_url(args.url, args.ext)

    # Download
    if not args.par:
        for l in all_links:
            try:
                filename = download_file(l, args.dest)
                print(l)
            except Exception as e:
                print(e)
    else:
        from multiprocessing.pool import ThreadPool
        results = ThreadPool(10).imap_unordered(
            lambda x: download_file(x, args.dest), all_links)
        for p in results:
            print(p)

Ένα παράδειγμα της χρήσης του είναι:

python3 soupget.py -p -e <list of extensions> -d <destination_folder> -u <target_webpage>

Και ένα πραγματικό παράδειγμα, αν θέλετε να το δείτε σε δράση:

python3 soupget.py -p -e .xlsx .pdf .csv -u https://healthdata.gov/dataset/chemicals-cosmetics
Απαντήθηκε 06/03/2020 στις 03:17
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more