Ich habe gehört, dass Web-Scraping ohne Server kostenlos durchgeführt werden kann, und habe es ausprobiert. Wenn es kein Thema gibt, werde ich nicht motiviert sein, also werde ich dieses Mal die Daten von Lotto 6 erfassen, damit ich auch nur ein wenig motiviert werden kann. Ist es wirklich zufällig? Ich habe es überprüft.
colab Registrieren Sie sich zunächst in colab und wählen Sie "Datei" → "Python3-Notizbuch". Ändern Sie die Hardware auf GPU
Jedes Mal, wenn Sie colab schließen, verlieren Sie alles, was Sie eingegeben haben. Sie müssen es daher jedes Mal installieren.
!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
!pip install selenium
!pip install beautifulsoup4
Ich habe viel recherchiert, aber es hat nicht funktioniert Der Code wurde unter Bezugnahme auf hier korrigiert. Ich habe mich für den automatischen Betrieb von Chrome entschieden.
import time
import random
import pandas as pd
from selenium import webdriver
+ from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
#URL der Mizuho Bank-Seite, auf der die Gewinnzahl von Lotto 6 veröffentlicht wird
loto_url1 = 'https://www.mizuhobank.co.jp/retail/takarakuji/loto/backnumber/loto6' #1. bis 460 ..
loto_url2 = 'https://www.mizuhobank.co.jp/retail/takarakuji/loto/backnumber/detail.html?fromto=' #Nach dem 461. Mal
num = 1
main_num_list = [] #Liste zum Speichern von 6 Ziffern dieser Nummer
bonus_num_list = [] #Liste zum Speichern von Bonusnummern
- #Verwenden Sie PhantomJS über Selen
- #driver = webdriver.PhantomJS()
+ #Starten Sie den Browser im Headless-Modus (Modus, der im Hintergrund ausgeführt wird), zeigen Sie die Website an, rufen Sie das generierte HTML ab und verwenden Sie Beautiful Soup+sauber.
+ options = webdriver.ChromeOptions()
+ #Verpflichtend
+ options.add_argument('--headless')
+ options.add_argument('--disable-gpu')
+ options.add_argument('--no-sandbox')
+ #Fehlertoleranz
+ options.add_argument('--ignore-certificate-errors')
+ options.add_argument('--allow-running-insecure-content')
+ options.add_argument('--disable-web-security')
+ #Funktionen, die bei Headless möglicherweise nicht benötigt werden
+ options.add_argument('--disable-desktop-notifications')
+ options.add_argument("--disable-extensions")
+ #Sprache
+ options.add_argument('--lang=ja')
+ #Aufhellen, ohne Bilder zu laden
+ options.add_argument('--blink-settings=imagesEnabled=false')
+ driver = webdriver.Chrome('chromedriver',options=options)
while num <= 1341:
#URL der Gewinnerseite vom 1. bis zum 460 ..
if num < 461:
url = loto_url1 + str(num).zfill(4) + '.html'
#Ab 461. Mal URL der Gewinnerseite
else:
url = loto_url2 + str(num) + '_' + str(num+19) + '&type=loto6'
#Holen Sie sich die entsprechende Seite mit PhantomJS
driver.get(url)
- #time.sleep(2) #Zeit zum Laden der Javascript-Seite
+ #
+ time.sleep(5)
html = driver.page_source.encode('utf-8')
soup = BeautifulSoup(html, "html.parser")
print(soup.title)
#Holen Sie sich den Tisch mit der Gewinnzahl von Lotto 6
table = soup.find_all("table")
del table[0]
for i in table:
#Erwerb dieser Nummer
main_num = i.find_all("tr")[2].find("td")
main_num_list.append(main_num.string.split(" "))
#Holen Sie sich Bonusnummern
bonus_num = i.find_all("tr")[3].find("td")
bonus_num_list.append(bonus_num.string)
num += 20 #Addiere 20 zu num, um zur nächsten Seite zu gelangen
time.sleep(random.uniform(1, 3)) #Stoppen Sie den Code für 1-3 Sekunden, um Dos-Angriffe zu vermeiden
#Ausgabe mit 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')
Wenn dieser Vorgang abgeschlossen ist, sollte sich "loto6.csv" auf der Registerkarte "Datei" befinden und wird beim Aktualisieren angezeigt.
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
df = pd.read_csv('loto6.csv') #Holen Sie sich den Header als Header
df = df.drop("Unnamed: 0", axis=1) #Löschen Sie die erste Spalte
nums_all = df[['main1','main2','main3','main4','main5','main6','bonus']]
plt.rcParams['figure.figsize'] = (8, 6)#Standardgröße für nachfolgende Abbildungen
plt.rcParams["font.size"] = 15
#tes = nums_all.values.flatten().size #Menge
tes = (nums_all.sum().sum())/(nums_all.size) #durchschnittlich
plt.hist(nums_all.values.flatten(), bins=43, normed=True)
plt.show()
tes
Der Durchschnitt liegt bei 22, und das Histogramm ist ebenfalls sehr unzusammenhängend. Ich fand es nutzlos, verschiedene Dinge wie maschinelles Lernen zu tun.
Recommended Posts