UnicodeEncodeError: 'cp932' pendant le scraping Python

Aperçu

Je souhaite extraire uniquement le nom du magasin de la liste des noms de magasin de goToEat et l'afficher au format CSV.

Beautifulsoup requests python3 windows10

J'utilise.

Détails de l'erreur et raison

J'ai pu extraire le nom du magasin incluant la balise sous forme de liste en spécifiant la balise html avec le code suivant


        urlName = "https://premium-gift.jp/eatosaka/use_store?events=page&id={}&store=&addr=&industry=".format(PageNumber)
        dataHTML = requests.get(urlName)
        soup = BeautifulSoup(dataHTML.content, "html.parser")
        elems = soup.select('h3.store-card__title')

Remplacez et supprimez les informations supplémentaires et exportez-les au format CSV. On m'a dit que i.text peut être utilisé pour obtenir des informations textuelles.

    with open(r'C:\Users\daisuke\Desktop\python\eat.csv', 'w') as f:
        writer = csv.writer(f)
        for i in elems:
            """
            i = str(i)
            i = i.replace('<h3 class="store-card__title">', '')
            i = i.replace('</h3>', '')
            i = i.replace('  ', '  ')
            i = i.replace(' ', ' ')
            """
            print(i.text)

            try:
                writer.writerow([i.text])
            except:
                writer.writerow(['error'])

L'erreur suivante se produit

Live Ise Ebi Cuisine Nakanogo Osaka Station Front Third Building Store
Traceback (most recent call last):
  File "C:\Users\daisuke\Desktop\python\go_to_eat.py", line 24, in <module>
    writer.writerow(i)
UnicodeEncodeError: 'cp932' codec can't encode character '\xa0' in position 20: illegal multibyte sequence

Référence 1, Référence 2

  1. La page à gratter étant constituée de différents codes de caractères, elle est automatiquement décodée avec n'importe quel code de caractère au moment du grattage.
  2. Le code de caractère cible dépend du système d'exploitation et CP932 (shift_jis) est sélectionné pour les fenêtres.
  3. Ceci est un code de caractère pour le japonais et ne prend pas en charge ** \ xa0 (pas d'espace de pause) **

Solution

Par conséquent, nous avons remplacé l'espace sans interruption par un espace demi-largeur comme indiqué ci-dessous. Pour ainsi dire, ce n'est pas bon car c'est une méthode symptomatique.


        for i in elems:
            i = str(i)
            i = i.replace('<h3 class="store-card__title">', '')
            i = i.replace('</h3>', '')
            i = i.replace('  ', '  ')
            i = i.replace(' ', ' ')
            print(i)

            try:
                writer.writerow([i])
            except:
                writer.writerow(['error'])

La meilleure chose à faire est peut-être de spécifier un code de caractère capable d'exprimer correctement le caractère en question. Si vous donnez l'argument de mot-clé d'encodage à la fonction open () comme indiqué ci-dessous, vous pouvez directement spécifier le code de caractère utilisé dans la conversion automatique, alors faites-le UTF-8 etc. qui peut exprimer des caractères Unicode. C'est très bien.

Les caractères sont déformés lorsque j'ouvre le fichier CSV, mais ce n'est pas grave si je change le code de caractère.


with open(r'C:\Users\daisuke\Desktop\python\eat.csv', 'w', encoding='utf-8') as f:

Cependant, lors de la lecture à partir de CSV, une colonne vide inutile a été ajoutée comme indiqué ci-dessous. ~~ Je ne sais toujours pas pourquoi. ~~ Une personne détaillée m'a dit dans les commentaires et l'a résolu! Je vous remercie

['Wolfgang Steak House par Wolfgang Zwinner Osaka']
[]
['Vignoble']
[]
['Sumikuni Rotating Chicken Cuisine Lucua Store']

Recommended Posts

UnicodeEncodeError: 'cp932' pendant le scraping Python
[Scraping] Scraping Python
Mémo de raclage Python
Scraping Python get_ranker_categories
Grattage avec Python
Grattage avec Python
Python racle eBay
Grattage Python get_title
Python: grattage partie 1
Scraping à l'aide de Python
Python: grattage, partie 2
Grattage en Python (préparation)
Essayez de gratter avec Python.
Principes de base du grattage Python
Grattage avec Python + PhantomJS
Grattage avec du sélénium [Python]
Scraping avec Python + PyQuery
Scraping RSS avec Python
Scraping à l'aide de Python 3.5 async / await
J'ai essayé de gratter avec Python
Web scraping avec python + JupyterLab
Grattage au sélénium en Python
Grattage avec Selenium + Python Partie 1
[Python] Scraping dans AWS Lambda
Grattage avec chromedriver en python
Grattage festif avec Python, scrapy
[Python] Transmission de valeurs pendant le multi-traitement
Scraping à l'aide de la syntaxe Python 3.5 Async
Grattage avec du sélénium en Python
Grattage avec Tor en Python
Web scraping avec Selenium (Python)
Scraping prévisions météorologiques avec python
Grattage avec Selenium + Python Partie 2
[Python + Selenium] Conseils pour le grattage
J'ai essayé de gratter avec du python
Web scraping débutant avec python
Python Crawling & Scraping Chapitre 4 Résumé
Essayez de gratter avec Python + Beautiful Soup
Scraping avec Node, Ruby et Python
Scraping avec Selenium en Python (Basic)
Grattage avec Python, Selenium et Chromedriver
pip installer les erreurs de gestion de mysql pendant python
Web scraping avec Python Première étape
J'ai essayé webScraping avec python.
Grattage avec Python et belle soupe
Gestion des exceptions lors de la communication de l'API Python
Faisons du scraping d'images avec Python
Exécuter le script Python pendant CodeSys # RunTime
Obtenez les tendances Qiita avec le scraping Python
[Python] Mémo de création de l'outil de grattage
Web scraping pour les débutants en Python (1)
Web scraping pour les débutants en Python (4) -1
Mémo d'apprentissage "Scraping & Machine Learning avec Python"
Grattage 1
Obtenez des informations météorologiques avec Python et le grattage
[Python] Informations sur les lentilles de grattage sur price.com
Obtenez des informations sur la propriété en grattant avec python
Grattage WEB avec Python (pour mémo personnel)