[PYTHON] Soyons avertis de la météo dans votre région préférée de Yahoo Weather sur LINE! ~ PART2 ~

Dernier examen

Jusqu'à la dernière fois, comme vous pouvez le voir dans cet article, "Soyons avertis de la météo dans votre région préférée de Yahoo météo sur LINE!" J'ai expliqué à partir de Yahoo météo pour obtenir l'URL de tout le pays.

cette fois

Cette fois, dans cette PART2, j'expliquerai brièvement de l'URL de la zone nationale à l'acquisition de l'URL de la zone détaillée (ville, quartier, commune, village). pense.

Tout d'abord, voici l'URL que j'ai obtenue la dernière fois. yahooURL.png

Les informations sur la page obtenues à partir de la première page de cette URL sont les suivantes. yahoo天気.png Vous pouvez facilement voir la météo des principales municipalités qui appartiennent à la région.

Si vous cliquez sur "Wakauchi" sur cet écran, la météo détaillée et la probabilité de précipitations de "Wakauchi" seront affichées. Wakkanai.png

Que faire d'ici ・ "Obtenir le nom et l'URL de la zone et de la ville" ・ "Obtenir des informations météo à partir de l'URL de la ville" Il y en a deux.

Mise en œuvre du programme

De là, je vais vous expliquer comment obtenir réellement les informations. Tout d'abord, j'expliquerai "Obtenir le nom et l'URL de la zone et de la ville".

Le programme est le suivant.

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     = ["Rural", "Municipalité", "URL"]
        writer.writerow(column)
        for target_url in reader:
            res    = requests.get(target_url[0])
            soup   = BeautifulSoup(res.text, 'lxml')
            chiku  = re.search(r".*de", str(soup.find("title").text)).group().strip("de")
            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)

Le premier avec open lit le fichier URL, et le second avec open ouvre le local et les municipalités et le fichier pour écrire leurs URL respectives. Ensuite, stockez les informations html dans la soupe et obtenez les informations nécessaires dans l'ordre. Pour chiku, ajustez le nom local de la destination d'acquisition de sorte qu'il ne s'agisse que du nom local avec une expression régulière et remplacez-le. Dans elems, enregistrez la balise a de html avec find_all pour obtenir l'URL de la ville, du quartier, de la ville et du village de destination.

De là viennent les variables qui sont écrites dans le fichier. Dans chikuNameList, celui dont la balise est "name" est obtenu à partir du html local en utilisant la notation d'inclusion. Heureusement, les noms des villes, quartiers, villes et villages sont tous dans l'étiquette «nom». Concernant l'instruction for, puisque la balise "data-ylk =" slk: prefctr "a l'URL de la ville, du quartier, de la ville et du village, définissez les conditions dans la première instruction if. Étant donné que la balise "data-ylk =" slk: prefctr "contient des données autres que l'URL de la ville, du quartier, de la ville et du village, seuls ceux qui correspondent au format d'URL sont jugés par la recherche d'expression régulière. Ajoutez ensuite le nom du district à chikuList et l'URL de la ville / quartier / ville / village à shosaiNumList.

Dans la dernière instruction for, écrivez le nom local, la ville, le quartier, la ville et l'URL stockés dans la liste dans «shosaiChiku.csv» ligne par ligne.

Et le fichier résultant ressemble à ceci: shosaiChiku.png

Il est possible d'accéder à l'URL de chaque ville, quartier, village et village tel quel et apporter les données souhaitées par expression régulière ou grattage, mais j'ai remarqué qu'il y avait du RSS, j'ai donc décidé de l'ajouter également.

df          = pd.read_csv("shosaiChiku.csv", encoding="cp932")
with open("dataBase.csv", "w", encoding="cp932", newline="") as DBcsv:
    writer  = csv.writer(DBcsv)
    #Écrire l'en-tête
    columns = ["Rural", "Municipalité", "URL", "RSS"]
    writer.writerow(columns)

    #Écrire les données (nom de ville, ville, quartier, ville, URL, RSS) ligne par ligne
    for place, city, url in zip(df["Rural"], df["Municipalité"], df["URL"]):
        row    = [place, city, url]
        rssURL = "https://rss-weather.yahoo.co.jp/rss/days/"
        #À partir du numéro de l'URL.Obtenir le nombre html ">".Moulé en rss
        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)   

Presque tout ce que vous faites est identique à la source précédente. Comme la plupart des données sont contenues dans shosaiChiku, entrez l'URL RSS Ajoutez juste un peu. (J'ai changé d'avis et essayé d'utiliser pandas read_csv.) L'URL de base pour RSS est la chaîne "https: // rss-weather.yahoo.co.jp / rss / days /" dans rssURL. Ce que fait le programme, c'est d'abord lire shosaiChiku ligne par ligne et obtenir la «région», «ville» et «URL». J'ai remarqué que l'URL après "jours /" dans RSS est la même que la partie numérique de l'URL de la ville, du quartier, de la ville et du village. Ensuite, extrayez uniquement la partie numérique de l'URL de la ville, du quartier, de la ville ou du village avec une expression régulière. De plus, RSS n'est pas ".html" mais ".xml", alors convertissez-le. Maintenant que nous connaissons l'URL RSS, nous l'ajoutons à la liste et l'écrivons.

Voici le fichier résultant. database.png C'est difficile à voir car vous ne l'ouvrez pas directement et ne l'utilisez pas, mais vous avez maintenant les données pour faire ce que vous voulez. (Quand j'ai le temps, je prévois d'utiliser sqlite pour le faire ressembler à une base de données)

en conclusion

J'ai beaucoup écrit, mais ça fait longtemps, donc je vais m'arrêter en "obtenant le nom et l'URL de la zone et de la ville" parmi les deux. De plus, dans la prochaine mise à jour, j'espère pouvoir vous expliquer comment obtenir les informations météorologiques et les envoyer sur LINE. .. ..

Alors la prochaine fois.

Recommended Posts

Soyons avertis de la météo dans votre région préférée de Yahoo Weather sur LINE! ~ PART2 ~
Soyons avertis de la météo dans votre région préférée de Yahoo Weather sur LINE!
Obtenez votre fréquence cardiaque à partir de l'API fitbit en Python!
Obtenez des informations de l'Agence météorologique et informez Slack des avertissements météorologiques dans les 23 quartiers de Tokyo
Comment est le progrès? Continuons le boom ?? en Python
Obtenez le titre et la date de livraison de Yahoo! News en Python
Obtenez le nombre de lecteurs d'articles sur Mendeley en Python
Obtenez, testez et soumettez des cas de test dans le concours AtCoder à partir de la ligne de commande
Obtenir la liste des packages de l'utilisateur spécifié à partir des packages enregistrés dans PyPI
Implémenter une partie du processus en C ++
Affiche automatiquement les paroles de la chanson en cours de lecture sur iTunes en Python
Obtenez uniquement le code source du package PyPI avec pip à partir de la ligne de commande
Récupérer le contenu de git diff depuis python
Obtenez la météo à Osaka via l'API Web (python)
[Python] Obtenez les principaux sujets de Yahoo News
Récupérer l'appelant d'une fonction en Python
Obtenir uniquement la partie adresse de la carte réseau (eth0)
Effaçons la (base) involontaire qui apparaît dans le terminal [Sortez de l'environnement Conda]
[Django] Essayons de clarifier la partie de Django qui était en quelque sorte à travers le test
Quelle est la force de votre Qiita? Statistiques sur le nombre de Contributes visibles dans les données