이제 웹 스크래핑을 사용하여 로또 6 데이터를 얻습니다.
7285 단어 colaboratory파이썬Python3
소재가 없으면 아무래도 동기가 나지 않기 때문에, 조금이라도 동기가 나도록 이번에는 로또 6의 데이터를 취득하고
정말 무작위입니까? 라고 검증을 실시했다.
colab
우선 colab 에 등록하고 ファイル
→ Python3のノートブック
하드웨어를 GPU로 변경
colab는 매번 닫으면 전부 넣은 것이 없어지므로 매번 설치가 필요
!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
!pip install selenium
!pip install beautifulsoup4
스크래핑 부분
여러가지 조사했지만 제대로 움직이지 않았기 때문에
여기 를 참고해 코드를 수정.
Chrome의 자동 조작으로 취득하기로 했다.
import time
import random
import pandas as pd
from selenium import webdriver
+ from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
# ロト6の当選番号が掲載されているみずほ銀行ページのURL
loto_url1 = 'https://www.mizuhobank.co.jp/retail/takarakuji/loto/backnumber/loto6' # 1~460回目
loto_url2 = 'https://www.mizuhobank.co.jp/retail/takarakuji/loto/backnumber/detail.html?fromto=' # 461回目以降
num = 1
main_num_list = [] # 本数字6桁を格納するリスト
bonus_num_list = [] # ボーナス数字を格納するリスト
- # PhantomJSをselenium経由で利用
- #driver = webdriver.PhantomJS()
+ # ブラウザをheadlessモード(バックグラウンドで動くモード)で立ち上げてwebsiteを表示、生成されたhtmlを取得し、BeautifulSoupで+ 綺麗にする。
+ options = webdriver.ChromeOptions()
+ # 必須
+ options.add_argument('--headless')
+ options.add_argument('--disable-gpu')
+ options.add_argument('--no-sandbox')
+ # エラーの許容
+ options.add_argument('--ignore-certificate-errors')
+ options.add_argument('--allow-running-insecure-content')
+ options.add_argument('--disable-web-security')
+ # headlessでは不要そうな機能
+ options.add_argument('--disable-desktop-notifications')
+ options.add_argument("--disable-extensions")
+ # 言語
+ options.add_argument('--lang=ja')
+ # 画像を読み込まないで軽くする
+ options.add_argument('--blink-settings=imagesEnabled=false')
+ driver = webdriver.Chrome('chromedriver',options=options)
while num <= 1341:
# 第1~460回目までの当選ページのURL
if num < 461:
url = loto_url1 + str(num).zfill(4) + '.html'
# 461回目以降当選ページのURL
else:
url = loto_url2 + str(num) + '_' + str(num+19) + '&type=loto6'
# PhntomJSで該当ページを取得
driver.get(url)
- #time.sleep(2) # javascriptのページを読み込む時間
+ # 途中から取得先のサイトが非同期になってるため、遅延時間を変更
+ time.sleep(5)
html = driver.page_source.encode('utf-8')
soup = BeautifulSoup(html, "html.parser")
print(soup.title)
# ロト6の当選番号がのっているテーブルの取得
table = soup.find_all("table")
del table[0]
for i in table:
# 本数字の取得
main_num = i.find_all("tr")[2].find("td")
main_num_list.append(main_num.string.split(" "))
# ボーナス数字の取得
bonus_num = i.find_all("tr")[3].find("td")
bonus_num_list.append(bonus_num.string)
num += 20 # 次のページに移動するためにnumに20を追加
time.sleep(random.uniform(1, 3)) # 1~3秒Dos攻撃にならないようにするためにコードを止める
# 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')
이 처리가 끝나면 파일 탭에 loto6.csv
가 오고 있을 것이며, 갱신을 하면 나온다.
그래프로 데이터 보기
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
df = pd.read_csv('loto6.csv') #ヘッダーをヘッダーにしたまま取得
df = df.drop("Unnamed: 0", axis=1) #1列目を削除
nums_all = df[['main1','main2','main3','main4','main5','main6','bonus']]
plt.rcParams['figure.figsize'] = (8, 6)# 以降の図のデフォルトサイズ
plt.rcParams["font.size"] = 15
#tes = nums_all.values.flatten().size # 個数
tes = (nums_all.sum().sum())/(nums_all.size) # 平均
plt.hist(nums_all.values.flatten(), bins=43, normed=True)
plt.show()
tes
결론
평균은 22, 히스토그램도 별로, 예쁘게 장미 하고 있네요.
이것은 기계 학습등으로 여러가지 해도 낭비라고 생각해 버렸다.
Reference
이 문제에 관하여(이제 웹 스크래핑을 사용하여 로또 6 데이터를 얻습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Kis3_/items/1057af45d32617376a67
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
!pip install selenium
!pip install beautifulsoup4
여러가지 조사했지만 제대로 움직이지 않았기 때문에
여기 를 참고해 코드를 수정.
Chrome의 자동 조작으로 취득하기로 했다.
import time
import random
import pandas as pd
from selenium import webdriver
+ from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
# ロト6の当選番号が掲載されているみずほ銀行ページのURL
loto_url1 = 'https://www.mizuhobank.co.jp/retail/takarakuji/loto/backnumber/loto6' # 1~460回目
loto_url2 = 'https://www.mizuhobank.co.jp/retail/takarakuji/loto/backnumber/detail.html?fromto=' # 461回目以降
num = 1
main_num_list = [] # 本数字6桁を格納するリスト
bonus_num_list = [] # ボーナス数字を格納するリスト
- # PhantomJSをselenium経由で利用
- #driver = webdriver.PhantomJS()
+ # ブラウザをheadlessモード(バックグラウンドで動くモード)で立ち上げてwebsiteを表示、生成されたhtmlを取得し、BeautifulSoupで+ 綺麗にする。
+ options = webdriver.ChromeOptions()
+ # 必須
+ options.add_argument('--headless')
+ options.add_argument('--disable-gpu')
+ options.add_argument('--no-sandbox')
+ # エラーの許容
+ options.add_argument('--ignore-certificate-errors')
+ options.add_argument('--allow-running-insecure-content')
+ options.add_argument('--disable-web-security')
+ # headlessでは不要そうな機能
+ options.add_argument('--disable-desktop-notifications')
+ options.add_argument("--disable-extensions")
+ # 言語
+ options.add_argument('--lang=ja')
+ # 画像を読み込まないで軽くする
+ options.add_argument('--blink-settings=imagesEnabled=false')
+ driver = webdriver.Chrome('chromedriver',options=options)
while num <= 1341:
# 第1~460回目までの当選ページのURL
if num < 461:
url = loto_url1 + str(num).zfill(4) + '.html'
# 461回目以降当選ページのURL
else:
url = loto_url2 + str(num) + '_' + str(num+19) + '&type=loto6'
# PhntomJSで該当ページを取得
driver.get(url)
- #time.sleep(2) # javascriptのページを読み込む時間
+ # 途中から取得先のサイトが非同期になってるため、遅延時間を変更
+ time.sleep(5)
html = driver.page_source.encode('utf-8')
soup = BeautifulSoup(html, "html.parser")
print(soup.title)
# ロト6の当選番号がのっているテーブルの取得
table = soup.find_all("table")
del table[0]
for i in table:
# 本数字の取得
main_num = i.find_all("tr")[2].find("td")
main_num_list.append(main_num.string.split(" "))
# ボーナス数字の取得
bonus_num = i.find_all("tr")[3].find("td")
bonus_num_list.append(bonus_num.string)
num += 20 # 次のページに移動するためにnumに20を追加
time.sleep(random.uniform(1, 3)) # 1~3秒Dos攻撃にならないようにするためにコードを止める
# 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')
이 처리가 끝나면 파일 탭에
loto6.csv
가 오고 있을 것이며, 갱신을 하면 나온다.그래프로 데이터 보기
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
df = pd.read_csv('loto6.csv') #ヘッダーをヘッダーにしたまま取得
df = df.drop("Unnamed: 0", axis=1) #1列目を削除
nums_all = df[['main1','main2','main3','main4','main5','main6','bonus']]
plt.rcParams['figure.figsize'] = (8, 6)# 以降の図のデフォルトサイズ
plt.rcParams["font.size"] = 15
#tes = nums_all.values.flatten().size # 個数
tes = (nums_all.sum().sum())/(nums_all.size) # 平均
plt.hist(nums_all.values.flatten(), bins=43, normed=True)
plt.show()
tes
결론
평균은 22, 히스토그램도 별로, 예쁘게 장미 하고 있네요.
이것은 기계 학습등으로 여러가지 해도 낭비라고 생각해 버렸다.
Reference
이 문제에 관하여(이제 웹 스크래핑을 사용하여 로또 6 데이터를 얻습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Kis3_/items/1057af45d32617376a67
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
df = pd.read_csv('loto6.csv') #ヘッダーをヘッダーにしたまま取得
df = df.drop("Unnamed: 0", axis=1) #1列目を削除
nums_all = df[['main1','main2','main3','main4','main5','main6','bonus']]
plt.rcParams['figure.figsize'] = (8, 6)# 以降の図のデフォルトサイズ
plt.rcParams["font.size"] = 15
#tes = nums_all.values.flatten().size # 個数
tes = (nums_all.sum().sum())/(nums_all.size) # 平均
plt.hist(nums_all.values.flatten(), bins=43, normed=True)
plt.show()
tes
평균은 22, 히스토그램도 별로, 예쁘게 장미 하고 있네요.
이것은 기계 학습등으로 여러가지 해도 낭비라고 생각해 버렸다.
Reference
이 문제에 관하여(이제 웹 스크래핑을 사용하여 로또 6 데이터를 얻습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Kis3_/items/1057af45d32617376a67텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)