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, 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.
Les informations sur la page obtenues à partir de la première page de cette URL sont les suivantes. 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.
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.
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:
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. 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)
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