Das PG, das durch Abkratzen der von der Meteorologischen Agentur veröffentlichten und als CSV-Datei ausgegebenen meteorologischen Daten erhalten wird, wird als Memorandum zusammengefasst.
So erhalten Sie Wetterinformationen mithilfe der Wetter-API in Python Liste der Vorsichtsmaßnahmen für das Web-Scraping [Python Web Scraping Technique Collection "Es gibt keinen Wert, der nicht abgerufen werden kann" JavaScript-Unterstützung @ Hinzugefügt 6/12] (https://qiita.com/Azunyan1111/items/b161b998790b1db2ff7a)
OS : Windows10 64 bit python : 3.7.4
Hauptpaketnamen | Verwenden |
---|---|
BeautifulSoup | Webseitenanalyse & Tag-Suche&Datenformung |
logging | Protokollausgabe und Einstellungen |
namedtuple | Taple-Betrieb |
pandas | Für Dataframe-Operationen |
requests | Webseite abrufen |
Es ist einfach zu machen. ① Verwenden Sie ein Paket namens "Anfragen", um die Daten auf der Webseite abzurufen, die Sie abrufen möchten
python
r = requests.get('URL')
② Analysieren Sie den Inhalt mit einem Paket namens Beautiful Soup
python
soup = BeautifulSoup(r.text,'lxml')
rows = soup.findAll("tr",class_="mtx") #Holen Sie sich Tags, indem Sie die Bedingungen eingrenzen
③ Als Datenrahmen mit Pandas sammeln und als CSV ausgeben
python
weatherData = pd.DataFrame(dataList[1:])
#Einstellung des Spaltennamens
weatherData.columns = nameList
#Ausgabe als CSV-Datei
weatherData.to_csv(f"{place}{startYear}_{endYear}.csv",encoding="SHIFT-JIS")
GetWeather.py
# coding: UTF-8
#*************************************************************************
#Prozess zur Erfassung von Wetterinformationen
#
#Zieldaten:Wetterinformationen in der Präfektur Fukuoka
#Verarbeitungsinhalt: Erhalten Sie Wetterinformationen von der Meteorologischen Agentur und geben Sie eine CSV-Datei aus
#* Bestätigt, dass es gemäß den Nutzungsbedingungen der Meteorologischen Agentur für kommerzielle Zwecke verwendet werden kann.
# https://www.jma.go.jp/jma/kishou/info/coment.html
# python ver = 3.7.4
#*************************************************************************
import os
import sys
import requests
import logging.config
from time import time
import datetime as dt
import sqlite3
import pprint
import pandas as pd
from bs4 import BeautifulSoup
from collections import namedtuple
import csv
#*************************************************************************
#Liste der Variablen
#*************************************************************************
now = dt.datetime.now() #Aktuelles Datum und Uhrzeit
now =now.strftime("%Y%m%d")
#Dateispeicherort, an dem sich exe befindet
#Stellen Sie den Arbeitsordner zwei vor dem absoluten Pfad ein, in dem CODE vorhanden ist
#Ändern Sie es, um bei Bedarf anzugeben, wo es Ihre Arbeitsdatei sein soll
os.chdir(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../"))
exePath = os.getcwd()
place_codeA = [82]
place_codeB = [47807]
place_name = ["Fukuoka"]
nameList = ["Punkt","Datum", "Land durchschnittlicher Druck(hPa)", "Durchschnittlicher Druck des Meeres(hPa)","'Niederschlag(mm)", "Durchschnittstemperatur(℃)", "Durchschnittliche Luftfeuchtigkeit(%)", "Durchschnittliche Windgeschwindigkeit(m/s)", "Sonnenlichtzeit(h)","Mittag(06:00-18:00)","Nacht(18:00-Nächster Tag 06:00)"]
dataList = [nameList]
collist = ["Point"]
base_url = "http://www.data.jma.go.jp/obd/stats/etrn/view/daily_s1.php?prec_no=%s&block_no=%s&year=%s&month=%s&day=1&view=p1"
#***********************************************
#Benannte Tupellistenliste
#*************************************************************************
#*************************************************************************
#[ ONL : OutputNameList]Ausgabe/Tupple mit Spaltennamen für die Aggregationsverarbeitung
#*************************************************************************
#Spaltenname 0-9,10-19,20-29
partsO =["PT","TIME", "EHPA","SHPA", "RAIN", "TEMPER", "HUMID","WIND","SUM","AM","PM"]
OLNM = namedtuple("ONL", partsO)
OCNL = OLNM("Punkt","Datum", "Land durchschnittlicher Druck(hPa)", "Durchschnittlicher Druck des Meeres(hPa)","'Niederschlag(mm)", "Durchschnittstemperatur(℃)", "Durchschnittliche Luftfeuchtigkeit(%)", "Durchschnittliche Windgeschwindigkeit(m/s)", "Sonnenlichtzeit(h)","Mittag(06:00-18:00)","Nacht(18:00-Nächster Tag 06:00)")
#*************************************************************************
#Funktionsliste
#*************************************************************************
#*************************************************************************
# ParseFloat:Konvertieren Sie eine Zeichenfolge in einen Float-Typ
#Streit:
#*************************************************************************
def ParseFloat(str):
try:
return float(str)
except:
return 0.0
#*************************************************************************
#Hauptverarbeitung
#Streit:
#*************************************************************************
def main():
returnValue = 0
#Protokolleinstellungen
logging.config.fileConfig(f"{exePath}/python/logging.conf", defaults={'logfilename': f"log/UI_{now}.log" })
logger = logging.getLogger()
logger.info("Verarbeitung meteorologischer Informationen Erfassen Sie die Aufzeichnung")
startYear = 2018
endYear = 2018
try:
#Schleife an Ort und Stelle
for place in place_name:
index = place_name.index(place)
#2018 in für Erklärung~Bis 2019
for year in range(startYear,endYear + 1):
#Januar des Jahres~Deckt 12 Mal im Dezember ab.
for month in range(1,13):
#Wenden Sie zwei Stadtcodes an, Jahr und Monat.
r = requests.get(base_url%(place_codeA[index], place_codeB[index], year, month))
r.encoding = r.apparent_encoding
print(dt.datetime.now())
#Scraping der Zieltabelle.
soup = BeautifulSoup(r.text,'lxml')
rows = soup.findAll("tr",class_="mtx") #Geben Sie das Tag und den Klassennamen an
rows = rows[4:]
#Erwirbt eine Zeile vom 1. bis zum letzten Tag
for row in rows:
data = row.findAll("td")
#Extrahieren Sie nur die gewünschten Informationen
rowData = [] #Initialisieren
rowData.append(place) #Punkt
rowData.append(str(year) + "/" + str(month) + "/" + str(data[0].string)) #Datum
rowData.append(ParseFloat(data[1].string)) #Land durchschnittlicher Druck(hPa)
rowData.append(ParseFloat(data[2].string)) #Durchschnittlicher Druck des Meeres(hPa)
rowData.append(ParseFloat(data[3].string)) # 'Niederschlag(mm)
rowData.append(ParseFloat(data[6].string)) #Durchschnittstemperatur(℃)
rowData.append(ParseFloat(data[9].string)) #Durchschnittliche Luftfeuchtigkeit(%)
rowData.append(ParseFloat(data[11].string)) #Durchschnittliche Windgeschwindigkeit(m/s)
rowData.append(ParseFloat(data[16].string)) #Sonnenlichtzeit(h)
rowData.append(data[19].string) #Mittag(06:00-18:00)
rowData.append(data[20].string) #Nacht(18:00-Nächster Tag 06:00)
#Fügen Sie der nächsten Zeile Daten hinzu
dataList.append(rowData)
#In Datenrahmen konvertieren
weatherData = pd.DataFrame(dataList[1:])
#Einstellung des Spaltennamens
weatherData.columns = nameList
print(weatherData)
#Ausgabe als CSV-Datei
weatherData.to_csv(f"{place}{startYear}_{endYear}.csv",encoding="SHIFT-JIS")
#Wenn eine Ausnahme auftritt
except:
logger.info("Meteorologischer Informationserfassungsprozess Anormales Ende")
logger.exception("[Anormal beendet]")
#Wenn es normal endet
else:
logger.info("Der meteorologische Informationserfassungsprozess wurde normal abgeschlossen")
finally:
print("{0}".format(returnValue), end="")
#Wenn Sie es nicht als Paket importiert haben, gehen Sie wie folgt vor
if __name__ == "__main__":
main()
Recommended Posts