[PYTHON] Comment gérer UnicodeDecodeError lors de l'exécution du téléchargement d'image Google

0. Introduction

Le téléchargement d'images Google est très pratique pour collecter des images d'apprentissage pour la reconnaissance d'image avec Tensorflow, etc.

Le téléchargement d'image Google qui peut être obtenu avec pip ne peut pas collecter d'images normalement pour le moment (2020/06), j'ai donc obtenu la version modifiée de téléchargement d'image Google. Cependant, lorsque j'ai exécuté le fichier python obtenu, j'ai obtenu un UnicodeDecodeError, je vais donc laisser un mémorandum sur la façon de le gérer.

À propos, je ne parlerai pas de ce contenu, mais un pilote chrome séparé est nécessaire pour collecter 101 images ou plus avec le téléchargement de google imade.

1. Environnement

macOS Catalina 10.15.3 Python 3.5.3 pip 20.1.1

2. Installer avec pip

Vous pouvez installer le téléchargement d'image google avec pip.

pip install google_images_download

Cependant, même si elle est exécutée à ce moment (2020/06), la collecte d'images ne peut pas être effectuée normalement.

~ $ ./google_images_download/google_images_download.py --keywords "cat"

Item no.: 1 --> Item name = cat
Evaluating...
Starting Download...


Unfortunately all 100 could not be downloaded because some images were not downloadable. 0 is all we got for this search filter!

Errors: 0


Everything downloaded!
Total errors: 0
Total time taken: 1.4127511978149414 Seconds

3. Installation de la version fixe

Une version modifiée du téléchargement d'images google est disponible ci-dessous, alors obtenez-la avec git clone. https://github.com/Joeclinton1/google-images-download/tree/patch-1

Lorsque j'ai exécuté le fichier python obtenu, j'ai eu l'erreur suivante.

~ $ python ./gid-joeclinton/google_images_download/google_images_download.py -k cat

Item no.: 1 --> Item name = cat
Evaluating...
Starting Download...
Traceback (most recent call last):
  File "./gid-joeclinton/google_images_download/google_images_download.py", line 1019, in <module>
    main()
  File "./gid-joeclinton/google_images_download/google_images_download.py", line 1008, in main
    paths,errors = response.download(arguments)  #wrapping response in a variable just for consistency
  File "./gid-joeclinton/google_images_download/google_images_download.py", line 844, in download
    paths, errors = self.download_executor(arguments)
  File "./gid-joeclinton/google_images_download/google_images_download.py", line 962, in download_executor
    items,errorCount,abs_path = self._get_all_items(raw_html,main_directory,dir_name,limit,arguments)    #get all image items and download images
  File "./gid-joeclinton/google_images_download/google_images_download.py", line 765, in _get_all_items
    image_objects = self._get_image_objects(page)
  File "./gid-joeclinton/google_images_download/google_images_download.py", line 754, in _get_image_objects
    object_decode = bytes(object_raw, "utf-8").decode("unicode_escape")
UnicodeDecodeError: 'unicodeescape' codec can't decode byte 0x5c in position 123085: \ at end of string

4. Solution de contournement UnicodeDecodeError

Correction de google_images_download.py. Ajout de "ignorer" à l'argument d'erreur de bytes.decode ().

   # Getting all links with the help of '_images_get_next_image'
    def _get_image_objects(self,s):
        start_line = s.find("AF_initDataCallback({key: \\'ds:1\\'") - 10
        start_object = s.find('[', start_line + 1)
        end_object = s.find('</script>', start_object + 1) - 4
        object_raw = str(s[start_object:end_object])
        object_decode = bytes(object_raw, "utf-8").decode("unicode_escape","ignore")
        image_objects = json.loads(object_decode)[31][0][12][2]
        image_objects = [x for x in image_objects if x[0]==1]
        return image_objects

Certaines images ne peuvent pas être acquises en raison d'URLError, etc., mais maintenant vous pouvez collecter des images normalement.

$ python ./gid-joeclinton/google_images_download/google_images_download.py -k cat

Item no.: 1 --> Item name = cat
Evaluating...
Starting Download...
Completed Image ====> 1.XXXX.png
Completed Image ====> 2.XXXX.jpg

~ abrégé ~

Unfortunately all 100 could not be downloaded because some images were not downloadable. 65 is all we got for this search filter!

Errors: 35


Everything downloaded!
Total errors: 35
Total time taken: 173.5407509803772 Seconds

5. Conclusion

J'ai simplement ignoré l'erreur qui est apparue, mais comme j'ai pu collecter l'image que je visais, j'ai arrêté de poursuivre la cause. Quand j'aurai le temps, j'aimerais enquêter sur la cause et prendre les mesures appropriées.

Recommended Posts

Comment gérer UnicodeDecodeError lors de l'exécution du téléchargement d'image Google
Comment gérer les erreurs en frappant pip ②
Comment gérer l'erreur OAuth2 lors de l'utilisation des API Google à partir de Python
[AWS] Comment gérer WordPress "Une erreur s'est produite lors du recadrage d'une image."
Comment gérer l'exécution de la transaction: échec dans Anaconda
Comment gérer les données déséquilibrées
Comment gérer l'erreur DistributionNotFound
Comment gérer les erreurs lors de l'installation de whitenoise et du déploiement sur Heroku
Comment gérer les erreurs lors de l'installation de Python et de pip avec choco
Comment gérer les erreurs de compatibilité d'énumération
Comment rechercher Google Drive dans Google Colaboratory
Comment télécharger des vidéos YouTube avec youtube-dl
Comment gérer l'erreur SSL lors de la connexion à S3 avec Python boto
Comment gérer les fuites de mémoire dans matplotlib.pyplot
ne peut pas décaper. Comment gérer les objets Annoy
Comment recadrer une image avec Python + OpenCV
Comment gérer les erreurs d'exécution dans subprocess.call
Comment gérer le module 'Sensorflow' n'a aucun attribut '
Comment afficher dans toute la fenêtre lors de la définition de l'image d'arrière-plan avec tkinter
Comment gérer "^ [[A ^ [[B ^ [[C ^ [[D"]] en appuyant sur la touche de direction lors de l'exécution de python sur mac
[Ansible] Comment utiliser l'authentification par mot de passe SSH lors de l'exécution d'ansible
Comment gérer l'échec de l'initialisation pyenv dans Fish 3.1.0
[Python] Comment spécifier l'emplacement de téléchargement avec youtube-dl
Comment charger des fichiers dans Google Drive avec Google Colaboratory
Comment accéder avec cache lors de la lecture_json avec pandas
[Python] Comment gérer l'erreur de lecture pandas read_html
Comment analyser avec Google Colaboratory à l'aide de l'API Kaggle
Comment traiter l'erreur "Erreur de type: Aucune signature correspondante trouvée" lors de l'utilisation de pandas fillna
Téléchargement d'image avec l'API Flickr
Gestion des fichiers statiques lors du déploiement en production avec Django
Comment extraire n'importe quel rendez-vous dans Google Agenda avec Python
Comment ne pas charger d'images lors de l'utilisation de PhantomJS avec Selenium
[Ev3dev] Comment afficher une image bmp sur un écran LCD avec python
Comment mettre à jour avec SQLAlchemy?
Comment résoudre la protection CSRF lors de l'utilisation d'AngularJS avec Django
Comment lancer avec Theano
[AWS] Comment gérer l'erreur "Point de code non valide" dans CloudSearch
Une histoire sur la façon de traiter le problème CORS
Pour les débutants, comment gérer les erreurs courantes dans les keras
Comment écrire la mise à jour de la banque de données en asynchrone avec Google Apps Engine
Comment séparer les chaînes avec ','
Comment gérer l'entrée du terminal dans l'environnement pipenv sans autorisation lors de l'utilisation de pipenv avec vscode
Comment faire RDP sur Fedora31
2 façons de gérer SessionNotCreatedException
Comment supprimer avec SQLAlchemy?
Comment générer des informations supplémentaires lors de la sortie de journaux avec le module de journalisation de python
Comment utiliser Google Colaboratory
Comment gérer le problème du déplacement du répertoire actuel lorsque Python est exécuté depuis Atom
Comment traiter l'erreur "Impossible de charger le module" canberra-gtk-module "qui apparaît lorsque vous exécutez OpenCV
Comment gérer l'erreur d'installation de python dans pyenv (BUILD FAILED)
Comment ne pas échapper au japonais en traitant avec JSON en Python
Comment gérer "Vous avez plusieurs backends d'authentification configurés ..." (Django)
Comment afficher des formules en latex lors de l'utilisation de Sympy (> = 1.4) dans Google Colaboratory
Comment installer des pandas sur EC2 (Comment gérer MemoryError et PermissionError)
Comment se connecter à Cloud Firestore à partir de Google Cloud Functions avec du code Python
Télécharger le logo Google → Texte avec OCR → Affichage sur HTML
[Icrawler] Comment télécharger des images même après avoir modifié les spécifications de Google (après 2020.3)