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