Téléchargement de fichiers à partir d'un serveur http en python
À l'aide de urllib2, nous pouvons obtenir la réponse http à partir d'un serveur web. Si le serveur tient simplement une liste de fichiers, on peut analyser les fichiers et les télécharger individuellement chaque. Cependant, je ne suis pas sûr de ce que le plus facile, le plus pythonic moyen pour analyser les fichiers.
Lorsque vous obtenez l'ensemble de la réponse http du serveur de fichier générique, urllib2 de urlopen() la méthode, comment pouvons-nous soigneusement télécharger chaque fichier?
Pourriez-vous nous donner trois ou quatre lignes de la source de l'échantillon à partir de cette "liste de fichiers", afin que nous puissions voir ce genre de mise en forme supplémentaire pourrait être impliqué?
OriginalL'auteur cellular | 2011-01-03
Vous devez vous connecter pour publier un commentaire.
Urllib2 pourrait être OK pour récupérer la liste des fichiers. Pour télécharger de grandes quantités de fichiers binaires PycURL http://pycurl.sourceforge.net/ est un meilleur choix. Cela fonctionne pour mon IIS en fonction de serveur de fichiers:
BeautifulSoup
pour obtenir tous<a>
s et puis.text
d'eux.OriginalL'auteur cgohlke
Vous pouvez utiliser urllib.urlretrieve (en Python 3.x: urllib.demande.urlretrieve):
Ce devrait être le travail 🙂
et c'est un fnction qui peut faire la même chose (à l'aide de urllib):
OriginalL'auteur
Pouvez-vous garantir que l'URL que vous demandez est une liste de répertoire? Si oui, pouvez-vous garantir que le format de l'inscription à l'annuaire?
Si oui, vous pouvez utiliser lxml pour analyser le document retourné et trouver tous les éléments qui maintiennent le chemin d'accès à un fichier, puis itérer sur les éléments et télécharger chaque fichier.
Et certains encore comme utiliser pyquery 😉
OriginalL'auteur Alex Vidal
Voici un non testé la solution:
C'est non testé, et il ne sera probablement pas travailler. C'est en supposant que vous avez une réelle liste de fichiers à l'intérieur d'un autre fichier. Bonne chance!
OriginalL'auteur Blender
Télécharger le fichier d'index
Si c'est vraiment énorme, il peut être la peine de lire un morceau à la fois;
sinon, il est probablement plus facile de saisir l'ensemble de la chose en mémoire.
Extrait de la liste des fichiers pour obtenir
Si la liste est xml ou html, utiliser un analyseur;
sinon si il y a beaucoup de traitement de chaîne à ce faire, utilisez regex;
d'autre utilisation simple chaîne de méthodes.
Encore une fois, vous pouvez analyser toutes en une fois ou progressivement.
Progressivement est un peu plus efficace et élégante,
mais à moins que vous sont le traitement de plusieurs dizaines de milliers
de lignes, c'est probablement pas la critique.
Pour chaque fichier, le télécharger et l'enregistrer dans un fichier.
Si vous voulez tenter d'accélérer les choses, vous pourriez essayer
l'exécution de plusieurs threads de téléchargement;
un autre (beaucoup plus rapide) approche pourrait être
de déléguer le travail à un dédié downloader
programme comme Aria2 http://aria2.sourceforge.net/ -
notez que Aria2 peut être exécuté comme un service et contrôlé
via XMLRPC, voir http://sourceforge.net/apps/trac/aria2/wiki/XmlrpcInterface#InteractWitharia2UsingPython
OriginalL'auteur Hugh Bothwell
Ma suggestion serait d'utiliser BeautifulSoup (qui est un HTML/XML parser) pour analyser la page pour une liste de fichiers. Ensuite, pycURL serait certainement venir dans maniable.
Une autre méthode, après vous avez la liste des fichiers, est d'utiliser urllib.urlretrieve d'une manière similaire à wget pour téléchargez simplement le fichier à un emplacement sur votre système de fichiers.
OriginalL'auteur Sri Raghavan
C'est un non-convential façon, mais bien qu'il travaille
OriginalL'auteur Mark Irkzher