[Python] Enregistrez le PDF de Google Colaboratory sur Google Drive! -Collectons des données pour l'apprentissage automatique

1.Tout d'abord

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.

1-1. Objectif

Cette fois, je vais gratter à l'aide de Google Colaboratory et télécharger les données PDF sur le Web sur Google Drive.

1-2. Cible (raison de lire cet article)

** 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 **.

1-3. Attention

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"

1-4. Éléments à vérifier

Cet article vous apprend à gratter, mais ** nous déclinons toute responsabilité **.

Pensez par vous-même et utilisez-le avec la bonne éthique.

2. Préparation

2-1. Décidez quoi gratter

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.

2-2. Rendre Google Colaboratory disponible

Si vous n'avez pas créé de compte Google pour utiliser Google Colaboratory, créez-en un.

Comment créer un nouveau bloc-notes ...

  1. Cliquez sur Google Colaboratory pour commencer.
  2. Créez-en un nouveau depuis Google Drive Référence: shoji9x9 "Résumé de l'utilisation de Google Colab"

3. Pratique

3-1. Importation de la bibliothèque

from bs4 import BeautifulSoup
import urllib
import urllib.request as req
import time
import requests
import os

3-2. Accéder aux données souhaitées lors de la transition des pages

É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)

3-3. Obtenir l'URL jusqu'en mai 2020

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 COVID_19_Colaboratory.png

3-4. Obtenir l'URL du PDF

#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 COVID_19_Colaboratory (1).png

Les données PDF que je souhaite peuvent ne pas être disponibles en fonction du jour, de sorte que les URL acquises sont rares.

3-5. Télécharger le PDF sur Google Drive

#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")

3-6. Télécharger le 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é.

4. Essayez de gratter

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

[Python] Enregistrez le PDF de Google Colaboratory sur Google Drive! -Collectons des données pour l'apprentissage automatique
Comment collecter des données d'apprentissage automatique
Une introduction à Python pour l'apprentissage automatique
[Python] Collectez des images avec Icrawler pour l'apprentissage automatique [1000 feuilles]
Télécharger les données directement depuis l'URL de Drive (Google Colaboratory)
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer du chapitre 2
Préparation au démarrage de «Python Machine Learning Programming» (pour macOS)
Programmation Python Machine Learning Chapitre 1 donne aux ordinateurs la possibilité d'apprendre à partir du résumé des données
Ensemble de données pour l'apprentissage automatique
Collectez des données d'apprentissage automatique en grattant des bases de données publiques biosourcées
Utilisation d'icrawler plus simple pour la collecte de données d'apprentissage automatique
Comment utiliser l'apprentissage automatique pour le travail? 03_Procédure de codage Python
Obtenez des données de l'API d'analyse avec le client API Google pour python
Méthode Newton pour l'apprentissage automatique (de 1 variable à plusieurs variables)
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 10 Introduction à Cupy
<Pour les débutants> bibliothèque python <Pour l'apprentissage automatique>
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 9 Introduction à scikit-learn
[Note] Sites Web relatifs à l'IA / à l'apprentissage automatique / à python [mis à jour de temps en temps]
Ingénierie des fonctionnalités pour l'apprentissage automatique à partir de la partie 1 Google Colaboratory - Validation et discrimination des données de comptage
Prenons la version gratuite "Introduction à Python pour l'apprentissage automatique" en ligne jusqu'au 27/04
Copier des données d'Amazon S3 vers Google Cloud Storage avec Python (boto)
J'ai commencé l'apprentissage automatique avec Python (j'ai également commencé à publier sur Qiita) Préparation des données
Amplifiez les images pour l'apprentissage automatique avec Python
Utiliser le groupe d'API d'apprentissage automatique A3RT de Python
J'ai installé Python 3.5.1 pour étudier l'apprentissage automatique
Pourquoi Python est choisi pour l'apprentissage automatique
Python: prétraitement en machine learning: acquisition de données
Comment rechercher Google Drive dans Google Colaboratory
[Shakyo] Rencontre avec Python pour l'apprentissage automatique
[Python] Première analyse de données / apprentissage automatique (Kaggle)
[Python] Conception d'applications Web pour l'apprentissage automatique
Python> Numéros de sortie de 1 à 100, 501 à 600> Pour csv
Comment utiliser "deque" pour les données Python
Python: prétraitement dans l'apprentissage automatique: conversion de données
Télécharger des images sur Google Drive avec Python
Acquisition de données à partir de l'API d'analyse avec l'application Web Client API Google pour python Partie 2
J'ai essayé de traiter et de transformer l'image et d'élargir les données pour l'apprentissage automatique
Comment introduire IPython (Python2) dans Mac OS X-Préparation pour une introduction à la théorie de l'apprentissage automatique-
Alignez le nombre d'échantillons entre les classes de données pour l'apprentissage automatique avec Python
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitres 11 et 12 Introduction à Pandas Matplotlib
Ingénierie des fonctionnalités pour l'apprentissage automatique à partir du 4e Google Colaboratory - Fonctionnalités interactives
[Python] Introduction facile à l'apprentissage automatique avec python (SVM)
Une introduction à l'apprentissage automatique pour les développeurs de robots
Apprentissage automatique à partir de 0 pour les étudiants en physique théorique # 1
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
[Python] Flux du scraping Web à l'analyse des données
Télécharger des fichiers directement sur Google Drive (à l'aide de Google Colaboratory)
Télécharger des fichiers sur Google Drive avec Lambda (Python)
Apprentissage automatique à partir de 0 pour les étudiants en physique théorique # 2
Fichiers PDF et sites utiles pour apprendre Python 3
Collecter des images pour l'apprentissage automatique (API Bing Search)
J'ai commencé l'apprentissage automatique avec le prétraitement des données Python
mémo d'apprentissage progate Python (mis à jour de temps en temps)
[Pour les débutants] Introduction à la vectorisation dans l'apprentissage automatique
La première étape de l'apprentissage automatique ~ Pour ceux qui veulent essayer l'implémentation avec python ~
Collectez vous-même des données d'image de formation au machine learning (API de recherche personnalisée Google Pikachu)
[Mis à jour de temps en temps] Mémos Python souvent utilisés pour l'analyse des données [Division N, etc.]