Erstellt PDF-Daten über die Influenza-Ausbruchsituation des Ministeriums für Gesundheit, Arbeit und Soziales mit pdfplumber
Dies ist einfach, da Sie die Position des Charakters mit Zeichen überprüfen und den Erntebereich festlegen können.
with pdfplumber.open("data.pdf") as pdf:
p1 = pdf.pages[1]
#Überprüfen Sie die Position des Textes
p1.chars
#Holen Sie sich Text mit Zuschneiden
week_crop = p1.within_bbox((0, 90, p1.width, 105))
s = week_crop.extract_text()
import csv
import datetime
import pathlib
import re
from urllib.parse import urljoin
import pdfplumber
import pandas as pd
import requests
from bs4 import BeautifulSoup
def fetch_file(url, dir="."):
r = requests.get(url)
r.raise_for_status()
p = pathlib.Path(dir, pathlib.PurePath(url).name)
p.parent.mkdir(parents=True, exist_ok=True)
with p.open(mode="wb") as fw:
fw.write(r.content)
return p
url = "https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/kenkou_iryou/kenkou/kekkaku-kansenshou01/houdou_00008.html"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
}
r = requests.get(url, headers=headers)
r.raise_for_status()
soup = BeautifulSoup(r.content, "html.parser")
d1 = []
d2 = []
for i in soup.select('ul.m-listLink > li > a[href$=".pdf"]')[::-1]:
text = i.get_text(strip=True)
t = re.match("(\d{4})Jahr(\d{1,2})Mond(\d{1,2})Tag", text)
#Datum der Pressemitteilung
if t:
year, month, day = map(int, t.groups())
dt_date = datetime.date(year, month, day)
else:
dt_date = datetime.date.today()
#PDF Datei
link = urljoin(url, i.get("href"))
p = fetch_file(link)
with pdfplumber.open(p) as pdf:
p1 = pdf.pages[1]
#Holen Sie sich Text mit Zuschneiden
week_crop = p1.within_bbox((0, 90, p1.width, 105))
s = week_crop.extract_text()
m = re.search("(\d{4})Jahr(\d{1,2})Woche\((\d{1,2})Mond(\d{1,2})So ~(\d{1,2})Mond(\d{1,2})Tag\)", s)
if m:
s_year, s_week, s_month, s_day, e_month, e_day = map(int, m.groups())
dt_start = datetime.date(s_year, s_month, s_day)
dt_end = datetime.date(s_year, e_month, e_day)
if dt_start > dt_end:
dt_end = datetime.date(s_year + 1, e_month, e_day)
table = p1.extract_table()
df_tmp = pd.DataFrame(
table[2:], columns=["Präfekturen", "Anzahl der Berichte", "Pro Fixpunkt"]
).set_index("Präfekturen")
df_tmp.index = df_tmp.index.map(lambda s: "".join(s.split()))
df_tmp = df_tmp.mask(df_tmp == "-")
df_tmp["Anzahl der Berichte"] = df_tmp["Anzahl der Berichte"].str.replace(",", "").astype(float).astype("Int64")
df_tmp["Pro Fixpunkt"] = df_tmp["Pro Fixpunkt"].astype(float)
df_tmp.loc["Jahr"] = s_year
df_tmp.loc["Woche"] = s_week
df_tmp.loc["Anfangsdatum"] = dt_start
df_tmp.loc["Endtermin"] = dt_end
s1 = df_tmp["Anzahl der Berichte"]
s1.name = dt_date
d1.append(s1)
s2 = df_tmp["Pro Fixpunkt"]
s2.name = dt_date
d2.append(s2)
df1 = pd.concat(d1, axis=1, sort=False).T.astype({"Jahr": int, "Woche": int})
df2 = pd.concat(d2, axis=1, sort=False).T.astype({"Jahr": int, "Woche": int})
df3 = df1.join(df2, rsuffix="(Pro Fixpunkt)")
df = df3.reindex(
columns=[
"Jahr",
"Woche",
"Anfangsdatum",
"Endtermin",
"Hokkaido",
"Hokkaido (pro Fixpunkt)",
"Präfektur Aomori",
"Präfektur Aomori (pro Fixpunkt)",
"Präfektur Iwate",
"Präfektur Iwate (pro Festpunkt)",
"Präfektur Miyagi",
"Präfektur Miyagi (pro Festpunkt)",
"Akita",
"Präfektur Akita (pro Fixpunkt)",
"Präfektur Yamagata",
"Präfektur Yamagata (pro Festpunkt)",
"Präfektur Fukushima",
"Präfektur Fukushima (pro Festpunkt)",
"Präfektur Ibaraki",
"Präfektur Ibaraki (pro Festpunkt)",
"Präfektur Tochigi",
"Präfektur Tochigi (pro Festpunkt)",
"Präfektur Gunma",
"Präfektur Gunma (pro Festpunkt)",
"Saitama",
"Präfektur Saitama (pro Festpunkt)",
"Präfektur Chiba",
"Präfektur Chiba (pro Festpunkt)",
"Tokio",
"Tokio (pro Festpunkt)",
"Präfektur Kanagawa",
"Präfektur Kanagawa (pro Festpunkt)",
"Präfektur Niigata",
"Präfektur Niigata (pro Festpunkt)",
"Präfektur Toyama",
"Präfektur Toyama (pro Festpunkt)",
"Präfektur Ishikawa",
"Präfektur Ishikawa (pro Festpunkt)",
"Präfektur Fukui",
"Präfektur Fukui (pro Festpunkt)",
"Präfektur Yamanashi",
"Präfektur Yamanashi (pro Fixpunkt)",
"Präfektur Nagano",
"Präfektur Nagano (pro Festpunkt)",
"Präfektur Gifu",
"Präfektur Gifu (pro Festpunkt)",
"Präfektur Shizuoka",
"Präfektur Shizuoka (pro Fixpunkt)",
"Präfektur Aichi",
"Präfektur Aichi (pro Festpunkt)",
"Präfektur Mie",
"Präfektur Mie (pro Festpunkt)",
"Präfektur Shiga",
"Präfektur Shiga (pro Festpunkt)",
"Kyoto",
"Kyoto (pro Festpunkt)",
"Präfektur Osaka",
"Osaka (pro Fixpunkt)",
"Präfektur Hyogo",
"Präfektur Hyogo (pro Festpunkt)",
"Präfektur Nara",
"Präfektur Nara (pro Festpunkt)",
"Präfektur Wakayama",
"Präfektur Wakayama (pro Festpunkt)",
"Präfektur Tottori",
"Präfektur Tottori (pro Festpunkt)",
"Präfektur Shimane",
"Präfektur Shimane (pro Festpunkt)",
"Präfektur Okayama",
"Präfektur Okayama (pro Festpunkt)",
"Präfektur Hiroshima",
"Präfektur Hiroshima (pro Festpunkt)",
"Präfektur Yamaguchi",
"Präfektur Yamaguchi (pro Festpunkt)",
"Präfektur Tokushima",
"Präfektur Tokushima (pro Festpunkt)",
"Präfektur Kagawa",
"Präfektur Kagawa (pro Festpunkt)",
"Präfektur Ehime",
"Präfektur Ehime (pro Festpunkt)",
"Präfektur Kochi",
"Präfektur Kochi (pro Fixpunkt)",
"Präfektur Fukuoka",
"Präfektur Fukuoka (pro Festpunkt)",
"Präfektur Saga",
"Präfektur Saga (pro Festpunkt)",
"Präfektur Nagasaki",
"Präfektur Nagasaki (pro Festpunkt)",
"Präfektur Kumamoto",
"Präfektur Kumamoto (pro Festpunkt)",
"Präfektur Oita",
"Präfektur Oita (pro Festpunkt)",
"Präfektur Miyazaki",
"Präfektur Miyazaki (pro Fixpunkt)",
"Präfektur Kagoshima",
"Präfektur Kagoshima (pro Festpunkt)",
"Präfektur Okinawa",
"Präfektur Okinawa (pro Festpunkt)",
"Gesamtzahl",
"Gesamtzahl (pro Festpunkt)",
"Letztes Jahr synchronisiert (insgesamt)",
"Letztes Jahr synchronisiert (Gesamtzahl) (pro Fixpunkt)",
]
)
df1.to_csv(
"influ_count.csv", index=False, quoting=csv.QUOTE_NONNUMERIC, encoding="utf_8_sig",
)
df2.to_csv(
"influ_point.csv", index=False, quoting=csv.QUOTE_NONNUMERIC, encoding="utf_8_sig",
)
df.to_csv(
"influ_all.csv", index=False, quoting=csv.QUOTE_NONNUMERIC, encoding="utf_8_sig", na_rep="-",
)
Recommended Posts