pythonコード、株探のチャート部分をキャプチャ、CSV読み込み

株探のチャート部分をキャプチャ

目的:株探のチャート部分をキャプチャする。

レイアウト変更されたら数値を変更
銘柄コードは、CSVファイルに記載し、見出し1行目、2行目以降にコードを記載。 コメントが多いのは、後学のためと必要に応じて修正がすぐにできるようにしたいので、汚いコードになってる 

環境:Windows10 Python、selenium,pandas コード中にコメントが多く汚いのは、後学のためと必要に応じて修正がすぐにできるようにしたいから。 
 キャプチャ後の画像
キャプチャ前は余白が多い

以下Pythonコード、スクロールは地道にずらして適した位置を割り出したので効率が悪かったけど思い当たる方法を知らんかった
>追記、2025/02/27 更に改良、日付をファイル名に追加した。capture_日付_コード銘柄名.pngのようになる
capture_2025年02月27日(木)_5301東海カーボン.png
参考サイト
https://atmarkit.itmedia.co.jp/ait/articles/2111/09/news015.html
  1. import os
  2. from selenium import webdriver
  3. from selenium.webdriver import ActionChains
  4. from selenium.webdriver.common.by import By
  5. #from webdriver_manager.chrome import ChromeDriverManager
  6. import time
  7. import datetime #https://atmarkit.itmedia.co.jp/ait/articles/2111/09/news015.html
  8. import pandas as pd#pip でインストールした
  9. #目的:株探のチャート部分をキャプチャする。レイアウト変更されたら数値を変更
  10. #銘柄コードは、CSVファイルに記載し、見出し1行目、2行目以降にコードを記載。
  11. #コメントが多いのは、後学のためと必要に応じて修正がすぐにできるようにしたいので、汚いコードになってる
  12. #
  13. #改良、
  14. #辞書dicを使って連想配列にして、「コード (tab)銘柄名」で管理する。これでコード銘柄名としたファイル名にする
  15. #タブ区切りなのでdelimiter='\t'にした
  16. #Googleスプレッドシートからコードと銘柄名の行列をコピーしてテキストエディタにそのままペーストできる。
  17. #参考サイト
  18. #https://choco-weblog.com/selenium_python_full-screen-capture/
  19. #2025/02/21 スクロールがうまくできなかったのでコメントになってる
  20. #時間があれば修正する
  21. options = webdriver.ChromeOptions()
  22. options.add_argument('--headless')
  23. options.add_argument('--hide-scrollbars')
  24. #driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
  25. driver = webdriver.Chrome()
  26. driver.implicitly_wait(10)
  27. capture_save_dir = r"C:\Users\mased\Pictures\Screenpresso"
  28.  
  29. def full_capture(filename, url):
  30. # #################
  31. # キャプチャ取得 株探のチャート部分をキャプチャする。レイアウト変更されたら数値を変更
  32. # #################
  33. driver.set_window_size(690,920)#375,300
  34. #filename += '_sp'
  35. #iw = ''
  36. #ih = ''
  37. #height = ''
  38. driver.get(url)
  39. time.sleep(3)
  40.  
  41. #ページの高さを取得
  42. #height = driver.execute_script("return document.body.scrollHeight")
  43. #ループ処理で少しづつ移動
  44. #for x in range(1,height):
  45. # driver.execute_script("window.scrollTo(0, "+str(x)+");")
  46. driver.execute_script("window.scrollTo(0, "+str(280)+");")
  47. #iw = driver.execute_script("return document.body.clientWidth")
  48. #ih = driver.execute_script("return document.body.clientHeight")
  49. #ih += 100 # 画面下部が途中で切れないように余分に100px分プラス
  50. #time.sleep(3)
  51. #driver.set_window_size(iw, ih)
  52. driver.save_screenshot(capture_save_dir + '//' + filename + '.png')
  53. print(filename)
  54. time.sleep(2)
  55.  
  56. #フル画面キャプチャ取得対象サイト
  57. # #################
  58. # MAIN
  59. # #################
  60. if __name__ == "__main__":
  61.  
  62. t_delta = datetime.timedelta(hours=9)
  63. JST = datetime.timezone(t_delta, 'JST')
  64. now = datetime.datetime.now(JST)
  65. # 曜日を含む日付
  66. #dYmd = now.strftime('%Y年%m月%d日(%a)')
  67. #print(d) # 2021年11月04日(Thu)
  68. #https://atmarkit.itmedia.co.jp/ait/articles/2111/09/news015.html
  69. d_week = {'Sun': '日', 'Mon': '月', 'Tue': '火', 'Wed': '水',
  70. 'Thu': '木', 'Fri': '金', 'Sat': '土'}
  71. key = now.strftime('%a')
  72. w = d_week[key]
  73. dYmd = now.strftime('%Y年%m月%d日') + f'({w})' #f'{now:%Y年%m月%d日}({w})'
  74. #print(dYmd) # 2021年11月04日(木)
  75.  
  76. #例)full_capture('キャプチャ画像ファイル名', 'ページURL')
  77. #codeList=[]
  78. #リスト配列は、Pandasを使ってCSV読み込みにしたほうが楽だろう。python_rakuten_trade02.pyを参考にして。2025/02/25
  79. #codelist.csvを作成済
  80. #1行目 "コード"見出し
  81. #2行目からデータ "5803"
  82. #次に、辞書を使って連想配列にして、「コード、銘柄名」で管理する。これでコード銘柄名としたファイル名にする
  83. #タブ区切りなのでdelimiter='\t'にした
  84. dicCodeList={}#辞書作成、「コード、銘柄名」の2列を扱う 重複は上書きになる、ただしキーは銘柄名なので、銘柄名が少しでも違うと登録できる
  85. df = pd.read_csv(r"C:\Users\mased\Documents\株2025\約定照会\python\codelist.csv",usecols=["コード","銘柄名"],delimiter='\t') #複数見出しがあればusecolsに追加できる
  86. #例 usecols=["約定日","取引","売買","コード","銘柄名","約定単価(円)"] 必要な見出し列だけで選べる。全部書く必要はない。
  87. mydataFrame=pd.DataFrame(df)
  88. for i in range(len(df)):
  89. code=mydataFrame.loc[i, 'コード']
  90. meigara=mydataFrame.loc[i, '銘柄名']
  91. #codeList.append(str(code))
  92. #dicCodeList[meigara]=code
  93. dicCodeList[code]=meigara #コードをキーにしたら重複が上書きでいいのかな、後で試す
  94. #codeList={'6501'}
  95. #captureName=""
  96. #銘柄名の重複は上書きになる、ただしキーは銘柄名なので銘柄名が簡略されたら登録できるので、
  97. # コードの重複を削除するようにしたほうがよさそう
  98. #と思ったら、現在の dicCodeList[meigara]=code を逆に したらいいのかな、後で試す
  99.  
  100. captureURL='https://kabutan.jp/stock/chart?code='
  101. for k,v in dicCodeList.items():#タプルで取得
  102. #full_capture('capture_'+ str(v) + k, captureURL+str(v))
  103. full_capture('capture_'+str(dYmd)+'_'+ str(k) + v, captureURL+str(k))
  104.  
  105. print("キャプチャ取得が完了しました")
  106. driver.close()
  107. driver.quit()
  108.  
  109.  

CSVはタブ区切りに変更(delimiter='\t')、辞書dicを使って連想配列にして、「コード (tab)銘柄名」で管理する。これでコード銘柄名としたファイル名にする
ファイル名は以下のようにコード+銘柄名になる


 
  1. import os
  2. from selenium import webdriver
  3. from selenium.webdriver import ActionChains
  4. from selenium.webdriver.common.by import By
  5. #from webdriver_manager.chrome import ChromeDriverManager
  6. import time
  7. import pandas as pd#pip でインストールした
  8. #目的:株探のチャート部分をキャプチャする。レイアウト変更されたら数値を変更
  9. #銘柄コードは、CSVファイルに記載し、見出し1行目、2行目以降にコードを記載。
  10. #コメントが多いのは、後学のためと必要に応じて修正がすぐにできるようにしたいので、汚いコードになってる
  11. #
  12. #改良、
  13. #辞書dicを使って連想配列にして、「コード (tab)銘柄名」で管理する。これでコード銘柄名としたファイル名にする
  14. #タブ区切りなのでdelimiter='\t'にした
  15. #Googleスプレッドシートからコードと銘柄名の行列をコピーしてテキストエディタにそのままペーストできる。
  16. #参考サイト
  17. #https://choco-weblog.com/selenium_python_full-screen-capture/
  18. #2025/02/21 スクロールがうまくできなかったのでコメントになってる
  19. #時間があれば修正する
  20.  
  21. options = webdriver.ChromeOptions()
  22. options.add_argument('--headless')
  23. options.add_argument('--hide-scrollbars')
  24. #driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
  25. driver = webdriver.Chrome()
  26. driver.implicitly_wait(10)
  27. capture_save_dir = r"C:\Users\mased\Pictures\Screenpresso"
  28.  
  29. def full_capture(filename, url):
  30. # #################
  31. # キャプチャ取得 株探のチャート部分をキャプチャする。レイアウト変更されたら数値を変更
  32. # #################
  33. driver.set_window_size(690,920)#375,300
  34. #filename += '_sp'
  35. #iw = ''
  36. #ih = ''
  37. #height = ''
  38. driver.get(url)
  39. time.sleep(3)
  40.  
  41. #ページの高さを取得
  42. #height = driver.execute_script("return document.body.scrollHeight")
  43. #ループ処理で少しづつ移動
  44. #for x in range(1,height):
  45. # driver.execute_script("window.scrollTo(0, "+str(x)+");")
  46. driver.execute_script("window.scrollTo(0, "+str(280)+");")
  47. #iw = driver.execute_script("return document.body.clientWidth")
  48. #ih = driver.execute_script("return document.body.clientHeight")
  49. #ih += 100 # 画面下部が途中で切れないように余分に100px分プラス
  50. #time.sleep(3)
  51. #driver.set_window_size(iw, ih)
  52. driver.save_screenshot(capture_save_dir + '//' + filename + '.png')
  53. print(filename)
  54. time.sleep(2)
  55.  
  56. #フル画面キャプチャ取得対象サイト
  57. # #################
  58. # MAIN
  59. # #################
  60. #例)full_capture('キャプチャ画像ファイル名', 'ページURL')
  61. #codeList=[]
  62. #リスト配列は、Pandasを使ってCSV読み込みにしたほうが楽だろう。python_rakuten_trade02.pyを参考にして。2025/02/25
  63. #codelist.csvを作成済
  64. #1行目 "コード"見出し
  65. #2行目からデータ "5803"
  66. #次に、辞書を使って連想配列にして、「コード、銘柄名」で管理する。これでコード銘柄名としたファイル名にする
  67. #タブ区切りなのでdelimiter='\t'にした
  68. dicCodeList={}#辞書作成、「コード、銘柄名」の2列を扱う
  69. df = pd.read_csv(r"C:\Users\mased\Documents\株2025\約定照会\python\codelist.csv",usecols=["コード","銘柄名"],delimiter='\t') #複数見出しがあればusecolsに追加できる
  70. #例 usecols=["約定日","取引","売買","コード","銘柄名","約定単価(円)"] 必要な見出し列だけで選べる。全部書く必要はない。
  71. mydataFrame=pd.DataFrame(df)
  72. for i in range(len(df)):
  73. code=mydataFrame.loc[i, 'コード']
  74. meigara=mydataFrame.loc[i, '銘柄名']
  75. #codeList.append(str(code))
  76. dicCodeList[meigara]=code
  77.  
  78. #codeList={'6501'}
  79. #captureName=""
  80. captureURL='https://kabutan.jp/stock/chart?code='
  81. for k,v in dicCodeList.items():#タプルで取得
  82. full_capture('capture_'+ str(v) + k, captureURL+str(v))
  83.  
  84. print("キャプチャ取得が完了しました")
  85. driver.close()
  86. driver.quit()
  1. こっちは、CSVカンマで銘柄コードのみの配列版
  2. import os
  3. from selenium import webdriver
  4. from selenium.webdriver import ActionChains
  5. from selenium.webdriver.common.by import By
  6. #from webdriver_manager.chrome import ChromeDriverManager
  7. import time
  8. import pandas as pd#pip でインストールした
  9. #目的:株探のチャート部分をキャプチャする。レイアウト変更されたら数値を変更
  10. #銘柄コードは、CSVファイルに記載し、見出し1行目、2行目以降にコードを記載。
  11. #コメントが多いのは、後学のためと必要に応じて修正がすぐにできるようにしたいので、汚いコードになってる
  12. #参考サイト
  13. #https://choco-weblog.com/selenium_python_full-screen-capture/
  14. #2025/02/21 スクロールがうまくできなかったのでコメントになってる
  15. #時間があれば修正する
  16.  
  17. options = webdriver.ChromeOptions()
  18. options.add_argument('--headless')
  19. options.add_argument('--hide-scrollbars')
  20. #driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
  21. driver = webdriver.Chrome()
  22. driver.implicitly_wait(10)
  23. capture_save_dir = r"C:\Users\mased\Pictures\Screenpresso"
  24.  
  25. def full_capture(filename, url):
  26. # #################
  27. # キャプチャ取得 株探のチャート部分をキャプチャする。レイアウト変更されたら数値を変更
  28. # #################
  29. driver.set_window_size(690,920)#375,300
  30. filename += '_sp'
  31. #iw = ''
  32. #ih = ''
  33. #height = ''
  34. driver.get(url)
  35. time.sleep(3)
  36.  
  37. #ページの高さを取得
  38. #height = driver.execute_script("return document.body.scrollHeight")
  39. #ループ処理で少しづつ移動
  40. #for x in range(1,height):
  41. # driver.execute_script("window.scrollTo(0, "+str(x)+");")
  42. driver.execute_script("window.scrollTo(0, "+str(280)+");")
  43. #iw = driver.execute_script("return document.body.clientWidth")
  44. #ih = driver.execute_script("return document.body.clientHeight")
  45. #ih += 100 # 画面下部が途中で切れないように余分に100px分プラス
  46. #time.sleep(3)
  47. #driver.set_window_size(iw, ih)
  48. driver.save_screenshot(capture_save_dir + '//' + filename + '.png')
  49. print(filename)
  50. time.sleep(2)
  51.  
  52. #フル画面キャプチャ取得対象サイト
  53. # #################
  54. # MAIN
  55. # #################
  56. #例)full_capture('キャプチャ画像ファイル名', 'ページURL')
  57. codeList=[]
  58. #リスト配列は、Pandasを使ってCSV読み込みにしたほうが楽だろう。python_rakuten_trade02.pyを参考にして。2025/02/25
  59. #codelist.csvを作成済
  60. #1行目 "コード"見出し
  61. #2行目からデータ "5803"
  62. df = pd.read_csv(r"C:\Users\mased\Documents\株2025\約定照会\python\codelist.csv",usecols=["コード"]) #複数見出しがあればusecolsに追加できる
  63. #例 usecols=["約定日","取引","売買","コード","銘柄名","約定単価(円)"] 必要な見出し列だけで選べる。全部書く必要はない。
  64. mydataFrame=pd.DataFrame(df)
  65. for i in range(len(df)):
  66. code=mydataFrame.loc[i, 'コード']#1見出しなのでlocは必要ないけど、列が増えたときのためにlocを使用
  67. codeList.append(str(code))
  68.  
  69. #codeList={'6501'}
  70. #captureName=""
  71. captureURL='https://kabutan.jp/stock/chart?code='
  72. for i in codeList:
  73. full_capture('capture_'+i, captureURL+i)
  74. #複数あれば、full_capture()を複数並べて置けば良い。>>修正してFOR分とCSVのリストに変えた
  75. #full_capture('capture_5202', 'https://kabutan.jp/stock/chart?code=5202')
  76. #full_capture('capture_5301', 'https://kabutan.jp/stock/chart?code=5301')
  77.  
  78. print("キャプチャ取得が完了しました")
  79. driver.close()
  80. driver.quit()

このブログの人気の投稿

国税庁確定申告でエラーになったところ株式譲渡が赤字の場合には、配当を申告不要とすることはできません

メモ、BlenderPythonスクリプトで参考になるオブジェクトや頂点の選択ツリー選択スクリプトリンクメモ