Ich musste die Tabelle auf der Webseite in meiner Recherche abkratzen, damit ich das Python-Programm vorstellen kann, das ich damals verwendet habe. Übrigens, da ich keinen Scraping-Verlauf hatte, habe ich es gemacht, während ich verschiedene Dinge untersucht habe, aber es gab fast keine Erklärung, wie der Tabellenteil von HTML in CSV konvertiert werden kann, nachdem die Tabelle auf der Webseite in HTML konvertiert wurde. Also habe ich diesen Artikel geschrieben.
Hinweise zum Scraping finden Sie unter der folgenden URL. https://qiita.com/Azunyan1111/items/b161b998790b1db2ff7a
Das gesamte Programm finden Sie unter hier.
import
import csv
import urllib
from bs4 import BeautifulSoup
Beschreibung der importierten Bibliothek -Csv ist eine Standard-Python-Bibliothek und wird diesmal zum Schreiben von CSV-Dateien verwendet. ・ Urllib wird verwendet, um auf Daten (HTML) im Web zuzugreifen und diese zu erfassen. -BeautifulSoup wird verwendet, um gezielte Daten aus HTML zu extrahieren
url = "https://en.wikipedia.org/wiki/List_of_cities_in_Japan"
html = urllib.request.urlopen(url)
soup = BeautifulSoup(html, 'html.parser')
#Tabelle aus HTML(Tabellen-Tag)Holen Sie sich alle Teile von
table = soup.find_all("table")
Dieses Mal werde ich die Wikipedia-Tabelle abkratzen, in der japanische Städte zusammengefasst sind.
Das Programm urllib.request.urlopen ruft den HTML-Code der angegebenen URL ab. Formatieren Sie es anschließend so, dass es mit Beautiful Soup einfach zu handhaben ist, und holen Sie dann den gesamten Teil mit der Tabelle (den Teil, der vom Tabellen-Tag umgeben ist) aus HTML mitoup.find_all ("table") ab, und Sie können loslegen.
Wenn Sie einen Chrome-Browser verwenden, können Sie die Entwicklertools (schwarzer Bildschirm im Screenshot) durch Drücken von F12 (Befehl + Option + I auf dem Mac) aufrufen. Danach können Sie den HTML-Quellcode von Elements sehen. Suchen Sie also nach dem Tabellen-Tag, das Sie kratzen möchten. Dieses Mal möchte ich die Tabelle in blau auswählen lassen. Tatsächlich kann dies durch einfaches Auswählen desjenigen, dessen Klassenname "wikitable" ist, aus allen Tabellen-Tags erhalten werden.
for tab in table:
table_className = tab.get("class")
print(table_className)
if table_className[0] == "wikitable":
break
#Ausgabeergebnis, wenn keine break-Anweisung vorhanden ist
# ['vertical-navbox', 'nowraplinks', 'hlist']
# ['wikitable'] <-Hier,Beenden Sie mit der break-Anweisung
# ['wikitable', 'sortable']
# ['wikitable', 'sortable']
# ['wikitable']
# ['nowraplinks', 'mw-collapsible', 'autocollapse', 'navbox-inner']
-Der Grund, warum table_className [0] gesetzt ist, ist, dass das Wikitable am Anfang von className steht. -Auch in diesem Fall gibt es mehrere andere Tabellen mit demselben Namen wie das Wikitable in HTML, aber da die Tabelle, die ich diesmal möchte, immer das erste Wikitable ist, geben Sie nach dem ersten Übergeben der if-Anweisung sofort eine break-Anweisung aus. Ich benutze es, um aus der Schleife herauszukommen.
Fügen Sie zum Schluss die CSV-Speicherfunktion zum obigen Programm hinzu.
for tab in table:
table_className = tab.get("class")
if table_className[0] == "wikitable":
#CSV-Teil speichern
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
Der Teil der CSV-Speicherfunktion besteht darin, das Tabellen-Tag in Zeilenrichtung ("tr") zu extrahieren, in Spaltenrichtung ("td", "th") herauszunehmen, im Listenformat anzuhängen und in CSV (Tabelle) zu speichern. Wenn Sie das Tag extrahieren können, können Sie es beim Kopieren und Einfügen verwenden.
import pandas as pd
pd.read_csv("test.csv")
Sicherlich könnte die gespeicherte CSV von Pandas angezeigt werden!
Es hängt von der Site ab, die Sie kratzen möchten, aber ich denke, Sie können die Tabelle auf diese Weise in CSV erhalten! Vielen Dank für Ihren bisherigen Besuch!
https://qiita.com/Azunyan1111/items/b161b998790b1db2ff7a
Recommended Posts