Hallo, das ist HanBei.
Vor kurzem bin ich süchtig nach maschinellem Lernen und Lernen.
"Ich möchte maschinelles Lernen machen, aber welche Art von Ausführungsumgebung kann ich tun?" Ich denke, einige Leute denken das, aber ich werde Google Colaboratory und [Jupyter Notebook] verwenden. ](Https://jupyter.org/) und andere nützliche Tools.
Ich bin allen Ingenieuren zutiefst dankbar, die unser Leben jeden Tag bereichern.
Dieses Mal werde ich mit Google Colaboratory kratzen und die PDF-Daten im Web auf Google Drive herunterladen.
** Wir hoffen, dass dies für diejenigen nützlich ist, die Daten für maschinelles Lernen mithilfe von PDF-Daten im Web erhalten möchten **.
Schaben ist ein Verbrechen, wenn Sie die Verwendung und Dosierung nicht korrekt befolgen.
"Ich möchte kratzen, also mach dir keine Sorgen!" Für diejenigen, die optimistisch oder besorgt sind, empfehlen wir, dass Sie mindestens die beiden folgenden Artikel lesen.
miyabisun: "Stellen Sie auf der Q & A-Website keine Fragen zum Schaben" nezuq: "Liste der Vorsichtsmaßnahmen für das Web-Scraping"
Dieser Artikel zeigt Ihnen, wie man kratzt, aber ** wir übernehmen keine Verantwortung **.
Denken Sie selbst und verwenden Sie es mit der richtigen Ethik.
Das Ziel sind diesmal die Daten, die vom Ministerium für Gesundheit, Arbeit und Soziales zu COVID-19 bekannt gegeben wurden.
Aktueller Stand der Neuinfektion mit Coronaviren und Reaktion des Ministeriums für Gesundheit, Arbeit und Soziales (0. Oktober, 2. Verordnungsjahr) , Täglich aktualisiert. Auf dieser Seite befindet sich ein PDF mit dem Titel [Anzahl der positiven PCR-Tests nach Präfektur in Japan (veröffentlicht am 0. Oktober 2020]) (https://www.mhlw.go.jp/content/10906000/000630233.pdf). , Ich möchte dies herunterladen.
Wenn Sie kein Google-Konto für die Verwendung von Google Colaboratory erstellt haben, erstellen Sie eines.
So erstellen Sie ein neues Notizbuch ...
from bs4 import BeautifulSoup
import urllib
import urllib.request as req
import time
import requests
import os
Da die gewünschten Daten in mehrere Seiten unterteilt sind, werden wir uns damit befassen.
Zum Beispiel, wenn Sie die Daten für den 9. Mai 2020 wollen ... Da es eine hierarchische Struktur von "Pressemitteilungsmaterial / Pressemitteilungsmaterial / aktuelle Situation einer neuen Coronavirus-Infektion und Reaktion des Ministeriums für Gesundheit, Arbeit und Soziales (9. Mai, 2. Jahr der Verordnung)" hat Ich werde immer mehr von der Seite von tauchen.
Dieses Mal wird die Seite auf Umwegen angegeben. Es gibt auch eine intelligentere Methode. Bitte beziehen Sie sich auch auf diese Methode.
#URL speichern,pr steht für Pressekonferenz
pr_url_list = []
#URL-Generierung von Pressemitteilungsmaterialien nach Jahr und Monat
def get_base_url(year,month):
#Basis-URL
base_url = "https://www.mhlw.go.jp/stf/houdou/houdou_list_" + str(year) + "0" + str(month) + ".html"
res = req.urlopen(base_url)
soup = BeautifulSoup(res, "html.parser")
#Geben Sie eine Liste der Materialien für Pressemitteilungen an
all_text = str(soup.find_all('ul', class_= 'm-listNews'))
#Der hier erfasste Text wird zeilenweise geteilt und in der Liste gespeichert.
all_text_list = all_text.split("\n")
#Lesen Sie die Liste Zeile für Zeile und extrahieren Sie nur die teilweise übereinstimmenden Zeilen
for text in all_text_list:
if "Über die aktuelle Situation einer neuen Coronavirus-Infektion und die Reaktion des Ministeriums für Gesundheit, Arbeit und Soziales" in text:
print("Anzahl der Zeilen: " + str(all_text_list.index(text)) + ", url: " + str(text))
#Holen Sie sich die URL eine Zeile vor
pr_url = all_text_list[all_text_list.index(text) - 1]
#Geben Sie ein bestimmtes Teil an und fügen Sie es in die URL ein
date_pr_url = pr_url[26:31]
PR_URL_LIST = "https://www.mhlw.go.jp/stf/newpage_" + date_pr_url + ".html"
pr_url_list.append(PR_URL_LIST)
print(PR_URL_LIST)
#Wenden Sie eine 1-Sekunden-Regel zum Schaben an
time.sleep(1)
Ich weiß nicht, wie ich es klug machen soll, deshalb schaue ich es mir von Januar bis Mai mit einer for-Erklärung an.
#Bereich bis Mai
for month in range(5):
#Jeden Monat hinzufügen
month += 1
#Suchbereich ist nur 2020
year = 2020
get_base_url(year, month)
↓ Wenn Sie bisher ausgeführt haben, können Sie die angegebene URL bis Mai überprüfen
#Speichert die PDF-URL nach Präfektur für jeden Monat und Tag
date_pt_urls = []
#Speichert die PDF-URL nach Präfektur für jeden Monat und Tag
pdf_urls_march_april = []
#Holen Sie sich die URL für März und April
def march_april_get_pt_url(date_pt):
date_pt_url = date_pt[19:37]
PT_PDF_URL = "https://www.mhlw.go.jp/content/" + str(date_pt_url) + ".pdf"
# print(PT_PDF_URL)
date_pt_urls.append(PT_PDF_URL)
#Holen Sie sich die URL für Mai (ändern Sie den Namen unterwegs nicht...)
def may_get_pt_url(date_pt):
date_pt_url = date_pt[19:37]
PT_PDF_URL = "https://www.mhlw.go.jp/content/" + str(date_pt_url) + ".pdf"
print(PT_PDF_URL)
date_pt_urls.append(PT_PDF_URL)
for num in range(len(pr_url_list)):
print(num)
#Schauen Sie sich die URL für jeden Tag der Reihe nach an
PR_URL = pr_url_list[num]
res = req.urlopen(PR_URL)
soup = BeautifulSoup(res, "html.parser")
all_text = str(soup.find_all)
#Der hier erfasste Text wird zeilenweise geteilt und in der Liste gespeichert.
all_text_list = all_text.split("\n")
#Lesen Sie die Liste Zeile für Zeile und extrahieren Sie nur die teilweise übereinstimmenden Zeilen
for text in all_text_list:
if "Anzahl der Patientenberichte nach Präfektur in häuslichen Fällen" in text:
march_april_get_pt_url(text)
#Lesen Sie die Liste Zeile für Zeile und extrahieren Sie nur die teilweise übereinstimmenden Zeilen
for text in all_text_list:
if "Anzahl positiver PCR-Tests nach Präfektur in Japan" in text:
may_get_pt_url(text)
#Wenden Sie eine 1-Sekunden-Regel zum Schaben an
time.sleep(1)
↓ Sie können die PDF-URL überprüfen, indem Sie bis hier ausführen
Die gewünschten PDF-Daten sind je nach Tag möglicherweise nicht verfügbar, sodass die erfassten URLs spärlich sind.
#Hängen Sie das Verzeichnis ein, das Sie verwenden möchten
from google.colab import drive
drive.mount('/content/drive')
def download_pdf(url, file_path):
response = requests.get(url, stream=True)
#Erfolgreiche Anfrage
if response.status_code == 200:
with open(file_path, "wb") as file:
file.write(response.content)
Überprüfen Sie, ob es heruntergeladen werden kann. Bitte geben Sie den Ordnernamen und den Dateinamen ein, die Sie für XX unten erstellt haben.
download_pdf(url=PT_PDF_URL, file_path="drive/My Drive/Colab Notebooks/〇〇〇/〇〇〇.pdf")
Bitte geben Sie den Dateinamen für XX unten willkürlich ein.
#Geben Sie das Ziel für die Datenspeicherung an
google_drive_save_dir = "./drive/My Drive/Colab Notebooks/〇〇〇/pdf"
for index, url in enumerate(date_pt_urls):
file_name = "{}.pdf".format(index)
print(file_name)
pdf_path = os.path.join(google_drive_save_dir, file_name)
print(pdf_path)
download_pdf(url=url, file_path=pdf_path)
Wenn dies ausgeführt wird, wird das PDF in den angegebenen Ordner hochgeladen.
Dieses Mal habe ich zum ersten Mal versucht zu kratzen, aber es war ziemlich schwierig.
Der HTML-Code der Site ist ... oder das Format des heruntergeladenen PDF ist ...
Normalerweise schreibe ich keinen Front-End-Code, aber es war interessant zu überlegen, wie man Code aus einer neuen Perspektive schreibt.
Nachdem ich so weit gegangen war, hörte ich auf, maschinell zu lernen. Der Grund ist, dass ich später merkte, dass ich nicht die Daten bekommen konnte, die ich wollte (lacht). Dieser Mangel an Planung ...
Also habe ich beschlossen, es für diejenigen zu sehen, die nach diesem Inhalt suchen!
Vielen Dank an alle, die bisher gelesen haben.
Ich wäre Ihnen dankbar, wenn Sie uns Ihre Kommentare und Ratschläge geben könnten ^^
Recommended Posts