Bonjour, c'est HanBei.
Récemment, je suis accro à l'apprentissage automatique et aux études.
"Je veux faire du machine learning, mais quel type d'environnement d'exécution puis-je faire?" Je pense que certaines personnes le pensent, mais j'utiliserai Google Colaboratory et [Jupyter Notebook]. ](Https://jupyter.org/) et d'autres outils utiles.
Je suis profondément reconnaissant à tous les ingénieurs qui enrichissent nos vies chaque jour.
Cette fois, je vais gratter à l'aide de Google Colaboratory et télécharger les données PDF sur le Web sur Google Drive.
** Nous espérons qu'il sera utile pour ceux qui souhaitent obtenir des données pour l'apprentissage automatique en utilisant des données PDF sur le Web **.
Le grattage est un ** crime ** si vous ne suivez pas correctement l'utilisation et le dosage.
"Je veux faire du grattage, alors ne t'inquiète pas!" Pour ceux qui sont optimistes ou inquiets, nous vous recommandons de lire au moins les deux articles ci-dessous.
miyabisun: "Ne posez pas de questions sur le site Q&R pour savoir comment gratter" nezuq: "Liste des précautions pour le scraping Web"
Cet article vous apprend à gratter, mais ** nous déclinons toute responsabilité **.
Pensez par vous-même et utilisez-le avec la bonne éthique.
Cette fois, la cible est les données annoncées par le ministère de la Santé, du Travail et du Bien-être social sur le COVID-19.
État actuel de la nouvelle infection à coronavirus et réponse du ministère de la Santé, du Travail et des Affaires sociales (0 octobre, 2e année d'ordonnance) , Mis à jour quotidiennement. Sur cette page, il y a un PDF intitulé Nombre de tests PCR positifs par préfecture au Japon (publié le 0 octobre 2020. , Je voudrais télécharger ceci.
Si vous n'avez pas créé de compte Google pour utiliser Google Colaboratory, créez-en un.
Comment créer un nouveau bloc-notes ...
from bs4 import BeautifulSoup
import urllib
import urllib.request as req
import time
import requests
import os
Étant donné que les données souhaitées sont divisées en plusieurs pages, nous les traiterons.
Par exemple, si vous voulez les données du 9 mai 2020 ... Puisqu'il a une structure hiérarchique de "matériel de communiqué de presse / matériel de communiqué de presse / situation actuelle de la nouvelle infection à coronavirus et réponse du ministère de la Santé, du Travail et du Bien-être social (9 mai, 2ème année de l'ordonnance)" Je vais plonger de plus en plus à partir de la page de.
Cette fois, la page est spécifiée de manière détournée. Il existe également une méthode plus intelligente, veuillez donc également vous référer à cette méthode.
#URL de stockage,pr signifie conférence de presse
pr_url_list = []
#Génération d'URL des communiqués de presse par année et par mois
def get_base_url(year,month):
#URL de base
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")
#Spécifiez une liste de matériel de communiqué de presse
all_text = str(soup.find_all('ul', class_= 'm-listNews'))
#Le texte acquis ici est divisé ligne par ligne et stocké dans la liste.
all_text_list = all_text.split("\n")
#Lisez la liste ligne par ligne et extrayez uniquement les lignes partiellement correspondantes
for text in all_text_list:
if "À propos de la situation actuelle de la nouvelle infection à coronavirus et de la réponse du ministère de la Santé, du Travail et du Bien-être social" in text:
print("Nombre de lignes: " + str(all_text_list.index(text)) + ", url: " + str(text))
#Obtenez l'url une ligne avant
pr_url = all_text_list[all_text_list.index(text) - 1]
#Spécifiez une pièce spécifique et mettez-la dans l'url
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)
#Appliquer la règle 1 seconde pour le scraping
time.sleep(1)
Je ne sais pas comment le faire intelligemment, alors je vais le voir de janvier à mai avec une déclaration for.
#Portée jusqu'en mai
for month in range(5):
#Ajouter chaque mois
month += 1
#La plage de recherche est 2020 uniquement
year = 2020
get_base_url(year, month)
↓ Si vous exécutez jusqu'à présent, vous pouvez vérifier l'URL spécifiée jusqu'en mai
#Enregistre l'URL PDF par préfecture pour chaque mois et jour
date_pt_urls = []
#Enregistre l'URL PDF par préfecture pour chaque mois et jour
pdf_urls_march_april = []
#Obtenir l'URL pour mars et avril
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)
#Obtenez l'URL de mai (ne changez pas le nom en cours de route...)
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)
#Regardez l'URL de chaque jour à tour de rôle
PR_URL = pr_url_list[num]
res = req.urlopen(PR_URL)
soup = BeautifulSoup(res, "html.parser")
all_text = str(soup.find_all)
#Le texte acquis ici est divisé ligne par ligne et stocké dans la liste.
all_text_list = all_text.split("\n")
#Lisez la liste ligne par ligne et extrayez uniquement les lignes partiellement correspondantes
for text in all_text_list:
if "Nombre de rapports de patients par préfecture dans les cas domestiques" in text:
march_april_get_pt_url(text)
#Lisez la liste ligne par ligne et extrayez uniquement les lignes partiellement correspondantes
for text in all_text_list:
if "Nombre de tests PCR positifs par préfecture au Japon" in text:
may_get_pt_url(text)
#Appliquer la règle 1 seconde pour le scraping
time.sleep(1)
↓ Vous pouvez vérifier l'URL du pdf en exécutant jusqu'à ici
Les données PDF que je souhaite peuvent ne pas être disponibles en fonction du jour, de sorte que les URL acquises sont rares.
#Montez le répertoire que vous souhaitez utiliser
from google.colab import drive
drive.mount('/content/drive')
def download_pdf(url, file_path):
response = requests.get(url, stream=True)
#Demande réussie
if response.status_code == 200:
with open(file_path, "wb") as file:
file.write(response.content)
Vérifiez s'il peut être téléchargé. Veuillez saisir ci-dessous le nom du dossier et le nom du fichier que vous avez créés pour XX.
download_pdf(url=PT_PDF_URL, file_path="drive/My Drive/Colab Notebooks/〇〇〇/〇〇〇.pdf")
Veuillez saisir le nom de fichier de manière arbitraire pour XX ci-dessous.
#Spécifiez la destination de sauvegarde des données
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)
Lorsqu'il est exécuté avec cela, le PDF sera téléchargé dans le dossier spécifié.
Cette fois, j'ai essayé de gratter pour la première fois, mais c'était assez difficile.
Le HTML du site est ... ou le format du PDF téléchargé est ...
Je n'écris généralement pas de code frontal, mais c'était intéressant de pouvoir réfléchir à la façon d'écrire du code dans une nouvelle perspective.
Après cela, j'ai arrêté de faire du machine learning. La raison est que j'ai réalisé plus tard que je ne pouvais pas obtenir les données que je voulais (rires). Ce manque de planification ...
J'ai donc décidé de le voir pour ceux qui recherchent ce contenu!
Merci à tous ceux qui ont lu jusqu'ici.
Je vous serais reconnaissant de bien vouloir nous faire part de vos commentaires et conseils ^^
Recommended Posts