Comment enregistrer une table récupérée par python en csv

À propos de cet article

J'avais besoin de gratter le tableau de la page Web dans mes recherches, je vais donc vous présenter le programme python que j'utilisais à l'époque. À propos, comme je n'avais pas d'historique de grattage, je l'ai fait en enquêtant sur diverses choses, mais il n'y avait presque aucune explication sur la façon de convertir la partie tableau de HTML en csv après avoir converti le tableau de la page Web en HTML. J'ai donc écrit cet article.

introduction

Veuillez consulter l'URL suivante pour des notes sur le scraping. https://qiita.com/Azunyan1111/items/b161b998790b1db2ff7a

Grattage avec Python

Le programme complet peut être trouvé à ici.

import

import csv
import urllib
from bs4 import BeautifulSoup

Description de la bibliothèque importée -Csv est une bibliothèque Python standard, et cette fois, elle est utilisée pour écrire des fichiers CSV. ・ Urllib est utilisé pour accéder et acquérir des données (HTML) sur le Web. -BeautifulSoup est utilisé pour extraire des données ciblées à partir de HTML

Obtenir du HTML

image.png

url = "https://en.wikipedia.org/wiki/List_of_cities_in_Japan"
html = urllib.request.urlopen(url)
soup = BeautifulSoup(html, 'html.parser')
#Tableau de HTML(balise de table)Obtenez toutes les parties de
table = soup.find_all("table")

Cette fois, je vais gratter le tableau wikipedia qui résume les villes japonaises.

Le programme urllib.request.urlopen récupère le HTML de l'url spécifiée. Après cela, formatez-le pour qu'il soit facile à manipuler en utilisant Beautiful Soup, puis récupérez toute la partie avec la table (la partie entourée par la balise table) à partir de HTML avec soup.find_all ("table") et vous êtes prêt à partir.

Découvrez le nom de la balise TABLE que vous souhaitez obtenir

image.png

Si vous utilisez un navigateur Chrome, vous pouvez entrer dans les outils de développement (écran noir dans la capture d'écran) en appuyant sur F12 (commande + option + I sur mac). Après cela, vous pouvez voir le code source HTML à partir d'Elements, alors recherchez la balise de table que vous souhaitez gratter. Cette fois, j'aimerais que le tableau soit sélectionné en bleu. En fait, cela peut être obtenu en sélectionnant simplement celui dont le nom de classe est "wikitable" parmi toutes les balises de la table.

for tab in table:
    table_className = tab.get("class")
    print(table_className)
    if table_className[0] == "wikitable":
        break

#Résultat de sortie lorsqu'il n'y a pas d'instruction break
# ['vertical-navbox', 'nowraplinks', 'hlist']
# ['wikitable'] <-ici,Quitter à l'aide de l'instruction break
# ['wikitable', 'sortable']
# ['wikitable', 'sortable']
# ['wikitable']
# ['nowraplinks', 'mw-collapsible', 'autocollapse', 'navbox-inner']

-La raison pour laquelle table_className [0] est défini est que le wikitable vient au début de className. -Aussi, dans ce cas, il existe plusieurs autres tables avec le même nom que le wikitable sur HTML, mais comme la table que je veux cette fois est toujours la première wikitable, après avoir passé l'instruction if pour la première fois, émettez immédiatement une instruction break. Je l'utilise pour sortir de la boucle.

Une fois que vous avez la table souhaitée, convertissez-la en CSV et enregistrez-la.

Enfin, ajoutez la fonction de sauvegarde CSV au programme ci-dessus.

for tab in table:
    table_className = tab.get("class")
    if table_className[0] == "wikitable":
        #Partie d'enregistrement CSV
        with open("test.csv", "w", encoding='utf-8') as file:
            writer = csv.writer(file)
            rows = tab.find_all("tr")
            for row in rows:
                csvRow = []
                for cell in row.findAll(['td', 'th']):
                    csvRow.append(cell.get_text())
                writer.writerow(csvRow)
        break

La fonction de sauvegarde CSV consiste à extraire la balise de table dans le sens de la ligne ("tr"), à la retirer dans le sens de la colonne ("td", "th"), à l'ajouter au format liste et à la sauvegarder au format CSV (table). Si vous pouvez extraire la balise, vous pouvez l'utiliser en copier-coller).

Pour confirmation, essayez d'afficher CSV à l'aide de pandas

import pandas as pd
pd.read_csv("test.csv")

image.png

En toute sécurité, le csv enregistré pourrait être affiché par les pandas!

Résumé

Cela dépend du site que vous voulez gratter, mais je pense que vous pouvez obtenir le tableau en CSV de cette façon! Merci de nous avoir rendu visite jusqu'à présent!

Les références

https://qiita.com/Azunyan1111/items/b161b998790b1db2ff7a

Recommended Posts

Comment enregistrer une table récupérée par python en csv
Comment lire un fichier CSV avec Python 2/3
[Python] Comment générer une table pandas dans un fichier Excel
Comment remplacer une méthode de type défini par l'utilisateur générée par python swig
[Python] Comment convertir un fichier db en csv
Comment diviser et enregistrer un DataFrame
[Python] Comment rendre une classe itérable
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
[Python] Comment ajouter des lignes et des colonnes à une table (pandas DataFrame)
[Python] Comment obtenir et modifier les lignes / colonnes / valeurs d'une table.
[Python] Comment inverser une chaîne de caractères
Fonction pour enregistrer les images par date [python3]
Comment obtenir stacktrace en python
Comment afficher la table quatre-vingt-dix-neuf en python
[Python] Comment stocker un fichier csv en tant que données de tableau à une dimension
[Good By Excel] script python pour générer sql pour convertir csv en table
Comment exécuter des scripts Maya Python
[Python] Comment lire le fichier csv (méthode read_csv du module pandas)
Comment trier en spécifiant une colonne dans le tableau Python Numpy.
[python] Comment afficher les éléments de la liste côte à côte
Comment ouvrir un navigateur Web à partir de python
Comment effacer un taple dans une liste (Python)
Comment incorporer des variables dans des chaînes python
Comment créer un fichier JSON en Python
Comment générer un objet Python à partir de JSON
Comment ajouter un chemin de recherche de module Python
Comment effacer les caractères générés par Python
Comment notifier les canaux Discord en Python
[Python] Comment dessiner un histogramme avec Matplotlib
[Python] Comment trier les instances par variables d'instance
[Python] Suite - Convertir le texte PDF en CSV page par page
Comment installer python
[Python] Comment nommer les données de table et les sortir avec csv (méthode to_csv)
[Python] Comment supprimer facilement un processus enfant lancé par multiprocessus à partir d'un autre processus
[BigQuery] Comment utiliser l'API de BigQuery pour Python -Création de table-
Comment convertir / restaurer une chaîne avec [] en python
[Python] Comment dessiner un graphique linéaire avec Matplotlib
Comment configurer un environnement Python à l'aide de pyenv
[Python] Comment développer des variables dans une chaîne de caractères
Comment écrire un type liste / dictionnaire de Python3
[Python] Convertir le texte PDF en CSV pour chaque page (2/24 postscript)
Comment convertir un fichier JSON en fichier CSV avec Python Pandas
Comment afficher DataFrame sous forme de tableau dans Markdown
Comment créer un package Python à l'aide de VS Code
[Python] Comment écrire une docstring conforme à PEP8
[Python] Un mémo pour écrire du CSV verticalement avec Pandas
[Python] Comment réécrire le style de table avec python-pptx [python-pptx]
Script Python qui crée un fichier JSON à partir d'un fichier CSV
[Python] Comment créer un histogramme bidimensionnel avec Matplotlib
Comment exécuter une commande à l'aide d'un sous-processus en Python
Comment lire un csv contenant uniquement des entiers en Python
Comment créer un environnement Python sur Amazon Linux 2
[Python] Comment appeler une fonction de c depuis python (édition ctypes)
[Python] Comment dessiner un diagramme de dispersion avec Matplotlib
[GCF + Python] Comment importer Excel vers GCS et créer une nouvelle table dans BigQuery
[Python] Vous pouvez enregistrer un objet dans un fichier en utilisant le module pickle.
Comment publier des pages GitHub avec Pelican, un générateur HTML statique créé par Python