今回もスクレイピングしていきます。
pythonを使ってのスクレイビング開発の依頼・外注 | Webシステム開発・プログラミングの仕事・副業 【クラウドソーシング ランサーズ】[ID:3468971]
mizuho銀行の宝くじ"ナンバーズ3"の1回目~直近の回の全データを取得したいです。 取得していただきたいデーターは↓ 「 '回別'(第1回) '当選日'(1994年10月7日) '抽選数字'(191) 」
ライブラリインポート
from bs4 import BeautifulSoup import requests import pandas as pd from time import sleep from selenium import webdriver from selenium.webdriver.chrome.options import Options url = 'https://www.mizuhobank.co.jp/retail/takarakuji/check/numbers/numbers3/index.html?year=2021&month=5' op = Options() op.add_argument("--headless"); op.add_argument('--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36') op.add_argument('--lang=ja-JP')
直近の当選番号をデータフレームに格納
ナンバーズの当選番号はA表とB表に分かれているので、それぞれから収集していきます。
まずはA表から。
# (A表)先月から過去1年間の当せん番号 のリンクを格納した配列を返す def backnumber_latest_link_to_lists(): url = 'https://www.mizuhobank.co.jp/retail/takarakuji/check/numbers/backnumber/index.html' driver = webdriver.Chrome('/Users/user/driver/chromedriver',options=op) driver.get(url) res = requests.get(url) soup = BeautifulSoup(res.text,'html.parser') lists = [] links = driver.find_elements_by_partial_link_text('ナンバーズ3') for link in links: lists.append(link.get_attribute('href')) return lists backnumber_latest = backnumber_latest_link_to_lists() # A表から回別、抽選日、抽選数字をDataFrameに変換 backnumbers = [] for link in backnumber_latest: url = link driver = webdriver.Chrome('/Users/user/driver/chromedriver',options=op) driver.get(url) no = driver.find_elements_by_class_name('bgf7f7f7') date = driver.find_elements_by_class_name('js-lottery-date-pc') number = driver.find_elements_by_class_name('js-lottery-number-pc') for i in range(0,len(no)): backnumber = {} backnumber['回別'] = no[i].text backnumber['抽せん日'] = date[i].text backnumber['ナンバーズ3抽せん数字'] = number[i].text backnumbers.append(backnumber) backnumber_df = pd.DataFrame(backnumbers)
過去の当選番号をデータフレームに格納
#Webドライバーのタイムアウト時間を10秒に設定 driver.implicitly_wait(10) url = 'https://www.mizuhobank.co.jp/retail/takarakuji/check/numbers/backnumber/index.html' driver.get(url) backnumber_links = driver.find_elements_by_css_selector('.typeTK.js-backnumber-b tbody tr td a') links = [] for item in backnumber_links: links.append(item.get_attribute('href')) all_df = pd.DataFrame() for i in range(0,len(links)): url = links[i] driver.get(url) # HTMLテーブルを取得 df = pd.read_html(driver.page_source)[0] # append dataframe all_df = all_df.append(df, ignore_index=True) # ナンバーズ4抽せん数字の削除 all_df = all_df.drop(all_df.columns[[3]], axis=1)
全データを結合
df = pd.DataFrame() df = df.append(all_df, ignore_index=True) df = df.append(backnumber_df, ignore_index=True) # 空白行の削除 df = df.dropna(how='all')
CSVデータで出力して完成。
今回も、1時間ほどで抽出できました。 案件の単価が1万円〜2万円なので、受注できていたとしたら、いいお小遣いですね!