J'essaie donc de créer un script Python qui télécharge des webcomics et les place dans un dossier sur mon bureau. J'ai trouvé ici quelques programmes similaires qui font quelque chose de similaire, mais rien de tout à fait ce dont j'ai besoin. Celui que j'ai trouvé le plus similaire est ici ( http://bytes.com/topic/python/answers/850927-problem-using-urllib-download-images ). J'ai essayé d'utiliser ce code:
>>> import urllib
>>> image = urllib.URLopener()
>>> image.retrieve("http://www.gunnerkrigg.com//comics/00000001.jpg","00000001.jpg")
('00000001.jpg', <httplib.HTTPMessage instance at 0x1457a80>)
J'ai ensuite cherché sur mon ordinateur un fichier "00000001.jpg", mais je n'ai trouvé que l'image en cache. Je ne suis même pas sûr qu'il ait enregistré le fichier sur mon ordinateur. Une fois que j'ai compris comment télécharger le fichier, je pense que je sais comment gérer le reste. Essentiellement, utilisez simplement une boucle for et divisez la chaîne au "00000000". "Jpg" et incrémentez le "00000000" jusqu'au plus grand nombre, que je devrais en quelque sorte déterminer. Des recommandations sur la meilleure façon de procéder ou comment télécharger le fichier correctement?
Merci!
MODIFIER 15/06/10
Voici le script terminé, il enregistre les fichiers dans le répertoire de votre choix. Pour une raison étrange, les fichiers n'étaient pas téléchargés et ils l'ont juste fait. Toute suggestion sur la façon de le nettoyer serait très appréciée. Je travaille actuellement sur la façon de découvrir que de nombreuses bandes dessinées existent sur le site afin que je puisse obtenir uniquement la dernière, plutôt que de laisser le programme se fermer après un certain nombre d'exceptions.
import urllib
import os
comicCounter=len(os.listdir('/file'))+1 # reads the number of files in the folder to start downloading at the next comic
errorCount=0
def download_comic(url,comicName):
"""
download a comic in the form of
url = http://www.example.com
comicName = '00000000.jpg'
"""
image=urllib.URLopener()
image.retrieve(url,comicName) # download comicName at URL
while comicCounter <= 1000: # not the most elegant solution
os.chdir('/file') # set where files download to
try:
if comicCounter < 10: # needed to break into 10^n segments because comic names are a set of zeros followed by a number
comicNumber=str('0000000'+str(comicCounter)) # string containing the eight digit comic number
comicName=str(comicNumber+".jpg") # string containing the file name
url=str("http://www.gunnerkrigg.com//comics/"+comicName) # creates the URL for the comic
comicCounter+=1 # increments the comic counter to go to the next comic, must be before the download in case the download raises an exception
download_comic(url,comicName) # uses the function defined above to download the comic
print url
if 10 <= comicCounter < 100:
comicNumber=str('000000'+str(comicCounter))
comicName=str(comicNumber+".jpg")
url=str("http://www.gunnerkrigg.com//comics/"+comicName)
comicCounter+=1
download_comic(url,comicName)
print url
if 100 <= comicCounter < 1000:
comicNumber=str('00000'+str(comicCounter))
comicName=str(comicNumber+".jpg")
url=str("http://www.gunnerkrigg.com//comics/"+comicName)
comicCounter+=1
download_comic(url,comicName)
print url
else: # quit the program if any number outside this range shows up
quit
except IOError: # urllib raises an IOError for a 404 error, when the comic doesn't exist
errorCount+=1 # add one to the error count
if errorCount>3: # if more than three errors occur during downloading, quit the program
break
else:
print str("comic"+ ' ' + str(comicCounter) + ' ' + "does not exist") # otherwise say that the certain comic number doesn't exist
print "all comics are up to date" # prints if all comics are downloaded
beautifulsoup
? Ce message apparaît dans la liste des principalesbeautifulsoup
questionsRéponses:
Python 2
Utilisation de urllib.urlretrieve
Python 3
Utiliser urllib.request.urlretrieve (qui fait partie de l'ancienne interface de Python 3, fonctionne exactement de la même manière)
la source
import urllib.request urllib.request.retrieve("http://...")
import urllib.request urllib.request.urlretrieve("http://...jpg", "1.jpg")
. C'esturlretrieve
maintenant à partir de 3.x.la source
Juste pour mémoire, en utilisant la bibliothèque de requêtes.
Bien qu'il devrait vérifier l'erreur requests.get ().
la source
Pour Python 3, vous devrez importer
import urllib.request
:pour plus d'informations, consultez le lien
la source
Version Python 3 de la réponse de @ DiGMi:
la source
J'ai trouvé cette réponse et je la modifie de manière plus fiable
De cela, vous n'obtenez jamais d'autres ressources ou exceptions lors du téléchargement.
la source
Si vous savez que les fichiers se trouvent dans le même répertoire
dir
du site Website
et ont le format suivant: filename_01.jpg, ..., filename_10.jpg alors téléchargez-les tous:la source
Il est plus simple de simplement
.read()
lire la réponse partielle ou entière, puis de l'écrire dans un fichier que vous avez ouvert dans un bon emplacement connu.la source
Peut-être avez-vous besoin de 'User-Agent':
la source
En plus de vous suggérer de lire attentivement la documentation
retrieve()
( http://docs.python.org/library/urllib.html#urllib.URLopener.retrieve ), je suggérerais d'appelerread()
le contenu de la réponse, puis de l'enregistrer dans un fichier de votre choix plutôt que de le laisser dans le fichier temporaire créé par la récupération.la source
Tous les codes ci-dessus, ne permettent pas de conserver le nom de l'image d'origine, ce qui est parfois obligatoire. Cela aidera à enregistrer les images sur votre lecteur local, en préservant le nom de l'image d'origine
Essayez ceci pour plus de détails.
la source
Cela a fonctionné pour moi en utilisant python 3.
Il obtient une liste d'URL à partir du fichier csv et commence à les télécharger dans un dossier. Au cas où le contenu ou l'image n'existerait pas, il prend cette exception et continue à faire sa magie.
la source
Une solution plus simple peut être (python 3):
la source
Et ça:
la source
Si vous avez besoin d'un support proxy, vous pouvez le faire:
la source
Une autre façon de faire est via la bibliothèque fastai. Cela a fonctionné comme un charme pour moi. J'étais confronté à une
SSL: CERTIFICATE_VERIFY_FAILED Error
utilisationurlretrieve
alors j'ai essayé ça.la source
Utilisation des demandes
la source
En utilisant urllib, vous pouvez le faire instantanément.
la source