[PYTHON] Lassen Sie uns über das Wetter in Ihrer Lieblingsgegend von Yahoo Wetter auf LINE informiert werden! ~ TEIL2 ~

Letzte Überprüfung

Bis zum letzten Mal, wie Sie in diesem Artikel sehen können, "Lassen Sie uns über das Wetter in Ihrem Lieblingsgebiet von Yahoo Wetter auf LINE benachrichtigt werden!" Ich erklärte von Yahoo Wetter bis zum Abrufen der URL des ganzen Landes.

diesmal

Dieses Mal werde ich in diesem TEIL 2 kurz von der URL des nationalen Gebiets bis zum Erwerb der URL des detaillierten Gebiets (Stadt, Gemeinde, Stadt, Dorf) erklären. Überlegen.

Hier ist zunächst die URL, die ich beim letzten Mal erhalten habe. yahooURL.png

Die Informationen auf der Seite in dieser URL, beispielsweise von der ersten Seite, lauten wie folgt. yahoo天気.png Sie können leicht das Wetter der wichtigsten Gemeinden sehen, die zur Region gehören.

Wenn Sie auf diesem Bildschirm auf "Wakauchi" klicken, wird die detaillierte Wetter- und Niederschlagswahrscheinlichkeit von "Wakauchi" angezeigt. Wakkanai.png

Was ist von hier aus zu tun? ・ "Abrufen des Namens und der URL des Gebiets und der Stadt" ・ "Wetterinformationen von der URL der Stadt abrufen" Es gibt zwei.

Programmdurchführung

Von hier aus werde ich erklären, wie man die Informationen tatsächlich erhält. Zunächst erkläre ich "Den Namen und die URL des Gebiets und der Stadt ermitteln".

Das Programm ist wie folgt.

with open("yahooChiku.csv", "r", encoding="utf-8") as readChikuNum:
    reader         = csv.reader(readChikuNum)
    with open("shosaiChiku.csv", "w", encoding="cp932", newline="") as schiku:
        writer     = csv.writer(schiku)
        column     = ["Ländlich", "Gemeinde", "URL"]
        writer.writerow(column)
        for target_url in reader:
            res    = requests.get(target_url[0])
            soup   = BeautifulSoup(res.text, 'lxml')
            chiku  = re.search(r".*von", str(soup.find("title").text)).group().strip("von")
            elems  = soup.find_all("a")
            chikuList, shosaiNumList = [], []
            chikuNameList = [chikuName.get_text() for chikuName in soup.find_all(class_= "name")]
            for e in elems:
                if re.search(r'data-ylk="slk:prefctr', str(e)):
                    if re.search(r'"https://.*html"', str(e)):
                        row = re.search(r'"https://.*html"', str(e)).group().strip('"')
                        chikuList.append(chiku)
                        shosaiNumList.append(row)

            for p, e, c in zip(chikuList, chikuNameList, shosaiNumList):
                writeList = [p, e, c]
                writer.writerow(writeList)

Die erste mit open liest die URL-Datei und die zweite mit open öffnet die lokalen und kommunalen Dateien und die Datei, um ihre jeweiligen URLs zu schreiben. Speichern Sie anschließend die HTML-Informationen in Suppe und erfassen Sie die erforderlichen Informationen nacheinander. Passen Sie für Chiku den lokalen Namen des Erfassungsziels so an, dass es nur der lokale Name mit einem regulären Ausdruck ist, und ersetzen Sie ihn. Speichern Sie in elems das HTML-Tag mit find_all, um die URL der Stadt, des Bezirks, der Stadt und des Dorfes abzurufen.

Von hier kommen die Variablen, die in die Datei geschrieben werden. In chikuNameList wird derjenige, dessen Tag "name" ist, aus dem lokalen HTML-Code unter Verwendung der Einschlussnotation abgerufen. Glücklicherweise sind die Namen von Städten, Gemeinden, Städten und Dörfern alle im "Namensschild" enthalten. In Bezug auf die for-Anweisung finden Sie hier die URL der Stadt, des Bezirks, der Stadt und des Dorfes im "data-ylk =" slk: prefctr "-Tag. Legen Sie daher die Bedingungen in der ersten if-Anweisung fest. Da das Tag "data-ylk =" slk: prefctr "andere Daten als die URL der Stadt, Gemeinde, Stadt und des Dorfes enthält, werden bei der Suche nach regulären Ausdrücken nur diejenigen beurteilt, die dem URL-Format entsprechen. Fügen Sie dann den Distriktnamen zur chikuList und die URL der Stadt / Gemeinde / Stadt / des Dorfes zur shosaiNumList hinzu.

Schreiben Sie in der letzten for-Anweisung den in der Liste gespeicherten lokalen Namen, die Stadt, die Gemeinde, die Stadt und die URL Zeile für Zeile in "shosaiChiku.csv".

Und die resultierende Datei sieht folgendermaßen aus: shosaiChiku.png

Es ist möglich, auf die URL für jede Stadt, Gemeinde, Stadt und jedes Dorf zuzugreifen und die gewünschten Daten durch regulären Ausdruck oder Scraping einzugeben. Ich habe jedoch festgestellt, dass RSS vorhanden ist, und habe mich daher entschlossen, dies ebenfalls hinzuzufügen.

df          = pd.read_csv("shosaiChiku.csv", encoding="cp932")
with open("dataBase.csv", "w", encoding="cp932", newline="") as DBcsv:
    writer  = csv.writer(DBcsv)
    #Header schreiben
    columns = ["Ländlich", "Gemeinde", "URL", "RSS"]
    writer.writerow(columns)

    #Schreiben Sie Daten (Name der Stadt, Stadt, Gemeinde, Stadt, URL, RSS) Zeile für Zeile
    for place, city, url in zip(df["Ländlich"], df["Gemeinde"], df["URL"]):
        row    = [place, city, url]
        rssURL = "https://rss-weather.yahoo.co.jp/rss/days/"
        #Von der URL "Nummer.Holen Sie sich HTML ">" Nummer.In RSS geformt
        url_pattern = re.search(r"\d*\.html", url).group()
        url_pattern = url_pattern.replace("html", "xml")
        rssURL      = rssURL + url_pattern
        row.append(rssURL)
        writer.writerow(row)   

Fast alles, was Sie tun, ist das gleiche wie in der vorherigen Quelle. Da die meisten Daten in shosaiChiku enthalten sind, geben Sie die RSS-URL ein Fügen Sie einfach ein wenig hinzu. (Ich habe es mir anders überlegt und versucht, pandas read_csv zu verwenden.) Die Basis-URL für RSS ist die Zeichenfolge "https: // rss-weather.yahoo.co.jp / rss / days /" in rssURL. Das Programm liest zuerst shosaiChiku Zeile für Zeile und erhält die "Region", "Stadt" und "URL". Ich habe festgestellt, dass die URL nach "Tagen /" in RSS mit dem Nummernteil der URL der Stadt, Gemeinde, Stadt und des Dorfes übereinstimmt. Extrahieren Sie als Nächstes nur den Nummernteil der URL der Stadt, Gemeinde, Stadt oder des Dorfes mit einem regulären Ausdruck. Außerdem ist RSS nicht ".html", sondern ".xml". Konvertieren Sie es also. Nachdem wir die RSS-URL kennen, hängen wir sie an die Liste an und schreiben sie.

Hier ist die resultierende Datei. database.png Es ist schwer zu erkennen, weil Sie es nicht direkt öffnen und verwenden, aber jetzt haben Sie die Daten, um das zu tun, was Sie wollen. (Wenn ich Zeit habe, plane ich, SQLite zu verwenden, damit es wie eine Datenbank aussieht.)

abschließend

Ich habe viel geschrieben, aber es ist lange her, also werde ich damit aufhören, "den Namen und die URL des Gebiets und der Stadt zu ermitteln". Außerdem hoffe ich, dass ich im nächsten Update erklären kann, wie man die Wetterinformationen erhält und sie online sendet. .. ..

Also nächstes Mal.

Recommended Posts

Lassen Sie uns über das Wetter in Ihrer Lieblingsgegend von Yahoo Wetter auf LINE informiert werden! ~ TEIL2 ~
Lassen Sie uns über das Wetter in Ihrer Lieblingsgegend von Yahoo Wetter auf LINE informiert werden!
Holen Sie sich Ihre Herzfrequenz von der Fitbit-API in Python!
Holen Sie sich Informationen von der Meteorological Agency und benachrichtigen Sie Slack über Wetterwarnungen in den 23 Bezirken von Tokio
Wie ist der Fortschritt? Lassen Sie uns mit dem Boom in Python weitermachen
Holen Sie sich den Titel und das Lieferdatum von Yahoo! News in Python
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python
Abrufen, Testen und Senden von Testfällen im AtCoder-Wettbewerb über die Befehlszeile
Rufen Sie die Paketliste des angegebenen Benutzers aus den in PyPI registrierten Paketen ab
Implementieren Sie einen Teil des Prozesses in C ++
Lassen Sie uns automatisch den Text des Songs anzeigen, der in Python in iTunes abgespielt wird
Rufen Sie nur den Quellcode des PyPI-Pakets mit pip über die Befehlszeile ab
Holen Sie sich den Inhalt von Git Diff aus Python
Holen Sie sich das Wetter in Osaka über Web-API (Python)
[Python] Holen Sie sich die Hauptthemen von Yahoo News
Holen Sie sich den Aufrufer einer Funktion in Python
Holen Sie sich nur den Adressteil der Netzwerkkarte (eth0)
Löschen wir die unbeabsichtigte (Basis), die im Terminal angezeigt wird [Verlassen Sie die Conda-Umgebung]
[Django] Lassen Sie uns versuchen, den Teil von Django zu klären, der im Test irgendwie durch war
Wie stark ist dein Qiita? Statistiken über die Anzahl der in den Daten angezeigten Beiträge