[PYTHON] Essayez le Web scraping maintenant et obtenez des données de loterie 6

J'ai entendu dire que le web scraping peut être fait gratuitement sans serveur et je l'ai essayé. S'il n'y a pas de sujet, je ne serai pas motivé, donc cette fois j'acquérirai les données du Lotto 6 pour que je puisse être motivé même un peu. Est-ce vraiment aléatoire? Je l'ai vérifié.

colab Tout d'abord, inscrivez-vous dans colab et sélectionnez File Python3 Notebook. Changer le matériel en GPU

Chaque fois que vous fermez colab, vous perdez tout ce que vous mettez, vous devez donc l'installer à chaque fois.

!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin

!pip install selenium
!pip install beautifulsoup4

Partie de grattage

J'ai fait beaucoup de recherches, mais cela n'a pas fonctionné, alors Correction du code en se référant à ici. J'ai décidé de l'obtenir par fonctionnement automatique de Chrome.

import time
import random
import pandas as pd
from selenium import webdriver
+ from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
 
#URL de la page de la Mizuho Bank où le numéro gagnant du Lotto 6 est affiché
loto_url1 = 'https://www.mizuhobank.co.jp/retail/takarakuji/loto/backnumber/loto6' #1er au 460e
loto_url2 = 'https://www.mizuhobank.co.jp/retail/takarakuji/loto/backnumber/detail.html?fromto=' #Après la 461e fois
num = 1
 
main_num_list = [] #Liste pour stocker 6 chiffres de ce numéro
bonus_num_list = [] #Liste pour stocker des numéros bonus


- #Utilisez PhantomJS via le sélénium
- #driver = webdriver.PhantomJS()
+ #Lancez le navigateur en mode sans tête (mode qui fonctionne en arrière-plan), affichez le site Web, obtenez le html généré et utilisez Beautiful Soup+nettoyer.
+ options = webdriver.ChromeOptions()
+ #Obligatoire
+ options.add_argument('--headless')
+ options.add_argument('--disable-gpu')
+ options.add_argument('--no-sandbox')
+ #Tolérance d'erreur
+ options.add_argument('--ignore-certificate-errors')
+ options.add_argument('--allow-running-insecure-content')
+ options.add_argument('--disable-web-security')
+ #Fonctions qui peuvent ne pas être nécessaires avec headless
+ options.add_argument('--disable-desktop-notifications')
+ options.add_argument("--disable-extensions")
+ #Langue
+ options.add_argument('--lang=ja')
+ #Éclaircir sans charger d'images
+ options.add_argument('--blink-settings=imagesEnabled=false')
+ driver = webdriver.Chrome('chromedriver',options=options)
while num <= 1341:
  
  #URL de la page gagnante du 1er au 460e
  if num < 461:
    url = loto_url1 + str(num).zfill(4) + '.html'
  #461ème fois URL de la page gagnante
  else:
    url = loto_url2 + str(num) + '_' + str(num+19) + '&type=loto6'
  
  #Obtenez la page correspondante avec PhantomJS
  driver.get(url)
- #time.sleep(2) #Il est temps de charger la page javascript
+ #Modifier le temps de retard car le site de destination d'acquisition devient asynchrone à partir du milieu
+ time.sleep(5)
  html = driver.page_source.encode('utf-8')
  soup = BeautifulSoup(html, "html.parser")
  print(soup.title)
 
  #Obtenez la table avec le numéro gagnant du Lotto 6
  table = soup.find_all("table")
  del table[0]
 
  for i in table:
    #Acquisition de ce numéro
    main_num = i.find_all("tr")[2].find("td")
    main_num_list.append(main_num.string.split(" "))
 
    #Obtenez des numéros bonus
    bonus_num = i.find_all("tr")[3].find("td")
    bonus_num_list.append(bonus_num.string)
    
  num += 20 #Ajouter 20 à num pour aller à la page suivante
  time.sleep(random.uniform(1, 3)) #Arrêtez le code pendant 1 à 3 secondes pour éviter les attaques Dos
 
#Sortie avec csv
df = pd.DataFrame(main_num_list, columns = ['main1', 'main2', 'main3', 'main4', 'main5', 'main6'])
df['bonus'] = bonus_num_list
df.index = df.index + 1
df.to_csv('loto6.csv')

Lorsque ce processus est terminé, loto6.csv devrait être dans l'onglet fichier, et il apparaîtra lors de la mise à jour.

Regardez les données dans le graphique

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

df = pd.read_csv('loto6.csv') #Obtenez l'en-tête comme en-tête
df = df.drop("Unnamed: 0", axis=1) #Supprimer la première colonne

nums_all = df[['main1','main2','main3','main4','main5','main6','bonus']]

plt.rcParams['figure.figsize'] = (8, 6)#Taille par défaut pour les figures suivantes
plt.rcParams["font.size"] = 15
#tes = nums_all.values.flatten().size #Quantité
tes = (nums_all.sum().sum())/(nums_all.size) #moyenne

plt.hist(nums_all.values.flatten(), bins=43, normed=True)
plt.show()
tes

en conclusion

safasfsaf.png

La moyenne est de 22 et l'histogramme est également très décousu. Je pensais qu'il était inutile de faire diverses choses telles que l'apprentissage automatique.

Recommended Posts

Essayez le Web scraping maintenant et obtenez des données de loterie 6
Technologie de grattage WEB et préoccupations
[Mémo personnel] Obtenez des données sur le Web et faites-en un DataFrame
Pratiquer le web scraping avec Python et Selenium
Scraping Web facile avec Python et Ruby
raclage Web
[Pour les débutants] Essayez le web scraping avec Python
Essayez d'obtenir une page Web et un fichier JSON en utilisant la bibliothèque Requests de Python
WEB grattage avec python et essayez de créer un nuage de mots à partir des critiques
Obtenez la maintenance de l'iPad en grattant et en informant Slack
J'ai essayé le web scraping en utilisant python et sélénium
[Python] Flux du scraping Web à l'analyse des données
Obtenez des informations sur les matchs de course de bateaux avec le web scraping
Essayez d'importer des données MLB sur Mac et Python
Obtenez une grande quantité de données Twitter de Starba avec python et essayez l'analyse de données Partie 1
grattage Web (prototype)
Analyse de données pour améliorer POG 1 ~ Web scraping avec Python ~
Essayez de diviser les données Twitter en SPAM et HAM
Les débutants en Python sont bloqués dans leur premier scraping Web
Obtenez des commentaires et des abonnés avec l'API de données YouTube