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.
Veuillez consulter l'URL suivante pour des notes sur le scraping. https://qiita.com/Azunyan1111/items/b161b998790b1db2ff7a
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
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.
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.
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).
import pandas as pd
pd.read_csv("test.csv")
En toute sécurité, le csv enregistré pourrait être affiché par les pandas!
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!
https://qiita.com/Azunyan1111/items/b161b998790b1db2ff7a
Recommended Posts