Cliquez ici pour récupérer les données (https://www.data.jma.go.jp/obd/stats/etrn/view/10min_s1.php?prec_no=44&block_no=47662&year=2019&month=01&day=01&view=p1)
# -*- coding: utf-8 -*-
import pandas as pd
import urllib.request
from bs4 import BeautifulSoup
url = 'https://www.data.jma.go.jp/obd/stats/etrn/view/10min_s1.php?prec_no=44&block_no=47662&year=2019&month=01&day=01&view=p1'
html = urllib.request.urlopen(url)
soup = BeautifulSoup(html, 'html.parser')
element = soup.find_all('tr', attrs={'class':'mtx', 'style':'text-align:right;'})
out = []
for ele in element:
data_list = []
for e in ele:
data_list.append(e.text)
out.append(data_list)
df = pd.DataFrame(data=out, columns=['Heure et minute','Pression locale','Pression au niveau de la mer','Précipitation','Température','Humidité relative','Vitesse moyenne du vent','Direction moyenne du vent','Vitesse du vent instantanée maximale','Direction instantanée maximale du vent','Heure du soleil'])
df.to_csv('tokyo_2019-01-01.csv', index=None,encoding='SJIS')
#① Génération d'objets pour analyser le HTML spécifié
soup = BeautifulSoup(html, 'html.parser')
#② Obtenez toutes les balises tr en spécifiant les conditions
element = soup.find_all('tr', attrs={'class':'mtx', 'style':'text-align:right;'})
Après cela, extrayez-en le texte et ajoutez-le à la liste un par un
** ↓ Résultat de sortie ↓ **
require 'csv'
require 'mechanize'
agent = Mechanize.new
url = 'https://www.data.jma.go.jp/obd/stats/etrn/view/10min_s1.php?prec_no=44&block_no=47662&year=2019&month=01&day=01&view=p1'
page = agent.get(url)
html = page.search('tr')
out = []
html.each do |element|
if element.get_attribute('style') == 'text-align:right;' then
data_list=[]
ele = element.search('td')
ele.each do |e|
data_list << e.inner_text
end
out << data_list
end
end
header = ['Heure et minute','Pression locale','Pression au niveau de la mer','Précipitation','Température','Humidité relative','Vitesse moyenne du vent','Direction moyenne du vent','Vitesse du vent instantanée maximale','Direction instantanée maximale du vent','Heure du soleil']
CSV.open('tokyo_2019-01-01.csv','w') do |csv|
csv << header
out.each do |val|
csv << val
end
end
#① Créez une instance de la classe Mechanize et récupérez le HTML de l'url spécifiée
agent = Mechanize.new
page = agent.get(url)
#② Après avoir recherché la balise tr avec la méthode de recherche, la balise de style est du texte-align:intérieur quand il a raison_Obtenir du texte avec la méthode text
html = page.search('tr')
out = []
html.each do |element|
if element.get_attribute('style') == 'text-align:right;' then
data_list=[]
ele = element.search('td')
ele.each do |e|
data_list << e.inner_text
#~ abrégé ~
** ↓ Résultat de sortie ↓ **
Étonnamment, il n'y avait pas beaucoup de différence dans la quantité de code. Est-il possible de rechercher des balises en spécifiant des attributs dans Ruby? .. ..
c'est tout! !! !!
Recommended Posts