Il semble que de nombreuses personnes présentent les symptômes suivants lorsque la pression baisse ou diminue fortement.
En regardant ma chronologie, certaines personnes me alertent lorsque la pression baisse. Il y a pas mal d'articles.
** Je ne sais pas s'il existe une base scientifique **
Pour le moment, je voulais savoir si ma condition physique était liée à la pression.
(La commande tree
peut également être utilisée avec win)
root/
│ .env
│ .env.sample
│ .gitignore
│ app.py
│ ---.json
│ README.md
│ requirements.txt
│
├─api_packages/
│ │ googleItem.py
│ │ slackItem.py
│ │ __init__.py
│
├─data_packages/
│ │ fetchHtml.py
│ │ generateGraph.py
│ │ __init__.py
│
├─imgs/
python=3.8
pip install beautifulsoup4
pip install requests
pip install numpy
pip install matplotlib
pip install python-dotenv
pip install gspread
pip install oauth2client
J'ai pensé à l'obtenir avec l'API, mais j'ai décidé d'utiliser les données de Tokyo publiées par l'Agence météorologique. https://www.jma.go.jp/jp/amedas_h/today-44132.html
Je voulais juste étudier «BeautifulSoup», donc je le fais aussi.
fetchHtml.py
import requests
from bs4 import BeautifulSoup
import datetime
import re
class HtmlFetcher:
url = None
def __init__(self, url):
self.url = url #J'ai essayé de le rendre variable, mais je me suis arrêté ...
def fetch_pressure_from_jma(self, search_time = datetime.datetime.now()): #Je prends l'argument par défaut, mais je ne peux pas faire ça
url = "URL que vous souhaitez rechercher"
try:
res = requests.get(url)
soup = BeautifulSoup(res.text, 'html.parser')
trs = soup.select("div#div_table > table > tr")
list_time_pressure = []
for tr in trs:
tds = tr.select("td")
if tds[0].get_text().isdigit() and tds[8].get_text().replace('\xa0', ''):
list_time_pressure.append(
{
'time': int(tds[0].get_text()),
'pressure': tds[8].get_text()
}
)
if len(list_time_pressure) == 0:
return None
else:
date_place_title = soup.select("table#tbl_title td.td_title")[0].get_text()
year = re.search(r'\d{4}Année', date_place_title).group()[0:4]
month = re.search(r'\d{2}Mois', date_place_title).group()[0:2]
day = re.search(r'\d{2}journée', date_place_title).group()[0:2]
place = re.search(r'\s+\D+\Z', date_place_title).group()[1:]
result = {}
# if search_time:
#Je voulais obtenir les données les plus proches de l'heure spécifiée ...
# sorted_time_pressures = sorted(list_time_pressure, key=lambda x: abs(int(search_time.hour - x['time'])))
#Obtenez le plus récent
sorted_time_pressures = sorted(list_time_pressure, key=lambda x:-x['time'])
result = {
'data': sorted_time_pressures,
'info': {'day': day, 'month': month, 'year': year, 'place': place}
}
return result
except Exception as e:
print(e)
return False
Je pense que vous pouvez le lire dans une atmosphère en quelque sorte
trs = soup.select("div#div_table > table > tr")
Si vous êtes familier avec jQuery
et SCSS
, c'est une notation plutôt intuitive.
La page ci-dessus avait une structure simple, mais au contraire, il n'y avait pas beaucoup de Class
s, donc j'ai dû faire une méthode d'acquisition approfondie.
Cité à partir de la page correspondante le 01 mars 2020
if tds[0].get_text().isdigit() and tds[8].get_text().replace('\xa0', ''):
Ici, il est déterminé si la ligne affiche la pression.
Heures du jour | Température | Précipitation | ... |
---|---|---|---|
Temps | ℃ | mm | ... |
1 | 8.5 | 0.5 | ... |
Il n'y a pas de données de pression dans la ligne «temps» et la ligne «heure». Donc, si les données peuvent être converties en un entier, il semble que la pression soit dans la 9e colonne.
De plus, si la pression n'est pas saisie, il est inévitable de l'obtenir, donc la condition est ajoutée. Je l'ai remplacé car il contient un personnage mystérieux.
J'étais inquiet lorsque j'écrivais un article pour voir s'il fonctionnait correctement ici.
list_time_pressure = []
Par exemple, si vous l'obtenez à 1h du matin, cette liste ressemblera à 1 de longueur.
date_place_title = soup.select("table#tbl_title td.td_title")[0].get_text()
J'obtiens l'information lorsque le premier nom de lieu et la date sont inclus.
Il semble que td_title
est la façon de nommer la classe.
Nous allons diviser cela en utilisant des expressions régulières.
#Les 4 premiers chiffres correspondent à l'année
#Je ne peux pas obtenir les données pour 645, quand il y a eu un grand renouvellement, et 20000 dans le futur, mais ...
year = re.search(r'\d{4}Année', date_place_title).group()[0:4]
month = re.search(r'\d{2}Mois', date_place_title).group()[0:2]
day = re.search(r'\d{2}journée', date_place_title).group()[0:2]
#Le dernier est comme un nom de pays
place = re.search(r'\s+\D+\Z', date_place_title).group()[1:]
sorted(list_time_pressure, key=lambda x:-x['time'])
Trié par ordre de temps le plus proche. Je me suis demandé si je pouvais gérer si la date avait changé, mais il semblait que les données de la veille n'étaient pas réinitialisées lorsque la date avait changé, alors je dis ceci.
J'étais fatigué ici, alors j'ai décidé de diviser l'article.
Recommended Posts