Es scheint, dass viele Menschen die folgenden Symptome haben, wenn der Druck abfällt oder stark abfällt.
Wenn ich auf meine Zeitleiste schaue, alarmieren mich einige Leute, wenn der Druck abfällt. Es gibt einige Artikel.
** Ich weiß nicht, ob es eine wissenschaftliche Grundlage gibt **
Vorläufig wollte ich herausfinden, ob meine körperliche Verfassung mit Druck zusammenhängt.
--Um Ihre körperliche Verfassung subjektiv zu verstehen, sehen Sie sich Diagramme und Benachrichtigungen über Druckänderungen an. ――Ist es mathematisch, mit der Aufzeichnung der Stimmungsänderung zu vergleichen? Bestätigen
(Der Befehl tree
kann auch mit win verwendet werden.)
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
Ich dachte darüber nach, es mit API zu bekommen, aber ich entschied mich, die von der Meteorological Agency veröffentlichten Daten von Tokio zu verwenden. https://www.jma.go.jp/jp/amedas_h/today-44132.html
Ich wollte nur BeautifulSoup
studieren, also mache ich das auch.
fetchHtml.py
import requests
from bs4 import BeautifulSoup
import datetime
import re
class HtmlFetcher:
url = None
def __init__(self, url):
self.url = url #Ich habe versucht, es variabel zu machen, aber aufgehört ...
def fetch_pressure_from_jma(self, search_time = datetime.datetime.now()): #Ich nehme das Standardargument, kann dies aber nicht
url = "URL, nach der Sie suchen möchten"
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}Jahr', date_place_title).group()[0:4]
month = re.search(r'\d{2}Mond', date_place_title).group()[0:2]
day = re.search(r'\d{2}Tag', date_place_title).group()[0:2]
place = re.search(r'\s+\D+\Z', date_place_title).group()[1:]
result = {}
# if search_time:
#Ich wollte die Daten erhalten, die der angegebenen Zeit am nächsten kommen ...
# sorted_time_pressures = sorted(list_time_pressure, key=lambda x: abs(int(search_time.hour - x['time'])))
#Holen Sie sich die neueste
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
Ich denke, man kann es irgendwie in einer Atmosphäre lesen
trs = soup.select("div#div_table > table > tr")
Wenn Sie mit "jQuery" und "SCSS" vertraut sind, ist dies eine ziemlich intuitive Notation. Die obige Seite hatte eine einfache Struktur, aber im Gegenteil, es gab nicht viele "Klassen", so dass ich eine tiefe Erfassungsmethode durchführen musste.
Zitiert von der entsprechenden Seite am 01. März 2020
if tds[0].get_text().isdigit() and tds[8].get_text().replace('\xa0', ''):
Hier wird festgestellt, ob die Leitung den Druck anzeigt.
Tageszeiten | Temperatur | Niederschlag | ... |
---|---|---|---|
Zeit | ℃ | mm | ... |
1 | 8.5 | 0.5 | ... |
Es gibt keine Druckdaten in der Zeile "Zeit" und der Zeile "Stunde". Wenn die Daten also in eine Ganzzahl konvertiert werden können, scheint der Druck in der 9. Spalte zu liegen.
Wenn der Druck nicht eingegeben wird, ist es außerdem unvermeidlich, ihn zu erhalten, sodass die Bedingung hinzugefügt wird. Ich habe es ersetzt, weil es einen mysteriösen Charakter enthält.
Ich war besorgt, als ich einen Artikel schrieb, um zu sehen, ob er hier richtig funktioniert.
list_time_pressure = []
Wenn Sie es beispielsweise um 1 Uhr morgens erhalten, sieht diese Liste wie 1 aus.
date_place_title = soup.select("table#tbl_title td.td_title")[0].get_text()
Ich erhalte die Informationen, wenn der Vorname und das Datum angegeben sind.
Es scheint, dass td_title
die Benennung der Klasse ist.
Wir werden dies mit regulären Ausdrücken teilen.
#Die ersten 4 Ziffern sind das Jahr
#Ich kann die Daten für 645 nicht erhalten, als es eine große Erneuerung gab, und für 20000 in der Zukunft, aber ...
year = re.search(r'\d{4}Jahr', date_place_title).group()[0:4]
month = re.search(r'\d{2}Mond', date_place_title).group()[0:2]
day = re.search(r'\d{2}Tag', date_place_title).group()[0:2]
#Der letzte ist wie ein Landname
place = re.search(r'\s+\D+\Z', date_place_title).group()[1:]
sorted(list_time_pressure, key=lambda x:-x['time'])
Sortiert nach der nächstgelegenen Zeit. Ich fragte mich, ob ich damit umgehen könnte, wenn sich das Datum ändern würde, aber es schien, dass die Daten am Vortag nicht zurückgesetzt wurden, als sich das Datum änderte, also sage ich das.
Ich war hier müde und beschloss, den Artikel zu teilen.
Recommended Posts