LoginSignup
16
21

More than 3 years have passed since last update.

Pythonで株価スクレイピング

Last updated at Posted at 2019-05-27

目的

株価解析のために、全銘柄に対して過去約20年分のデータを取得し、
データベースに蓄積する。

コード

https://github.com/jun6231jp/stocks/blob/master/scraping_stocks.py
Yahooファイナンスからスクレイピングする例である。
サーバ過負荷にならないよう、アクセス間隔をある程度空けている。
仮にサーバエラーとなった場合はリトライするようにしている。

※現在はYahooファイナンスはスクレイピングを禁止しているため、ご参考まで。

データベース作成

株式コードに対する社名および株価を蓄積するためのデータベースを次のように作成する。

stocks
names
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(11)      | NO   | PRI | NULL    |       |
| name  | varchar(100) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+

prices
+--------+---------+------+-----+------------+-------+
| Field  | Type    | Null | Key | Default    | Extra |
+--------+---------+------+-----+------------+-------+
| id     | int(11) | NO   | PRI | 0          |       |
| date   | date    | NO   | PRI | 0000-00-00 |       |
| open   | int(11) | YES  |     | NULL       |       |
| high   | int(11) | YES  |     | NULL       |       |
| low    | int(11) | YES  |     | NULL       |       |
| close  | int(11) | YES  |     | NULL       |       |
| volume | int(11) | YES  |     | NULL       |       |
| fixed  | int(11) | YES  |     | NULL       |       |
+--------+---------+------+-----+------------+-------+

実行結果

社名および各社の株価の日次データを取得できた。

names
+------+--------------------------------------------------------
| id   | name                                                     
+------+--------------------------------------------------------
| 1301 | (株)極洋                                                  
| 1305 | ダイワ 上場投信-トピックス                                  
| 1306 | TOPIX連動型上場投資信託                                    
| 1308 | 上場インデックスファンドTOPIX                            
| 1309 | 上海株式指数・上証50連動型上場投資信託                    
  .
  .
  .

prices
+------+------------+------+------+------+-------+--------+-------+
| id   | date       | open | high | low  | close | volume | fixed |
+------+------------+------+------+------+-------+--------+-------+
| 1301 | 2019-05-07 | 2742 | 2786 | 2742 |  2783 |  22200 |  2783 |
| 1301 | 2019-05-08 | 2777 | 2780 | 2745 |  2774 |  23200 |  2774 |
| 1301 | 2019-05-09 | 2762 | 2772 | 2716 |  2722 |  25800 |  2722 |
| 1301 | 2019-05-10 | 2725 | 2740 | 2690 |  2690 |  42900 |  2690 |
| 1301 | 2019-05-13 | 2690 | 2826 | 2656 |  2786 |  75600 |  2786 |
| 1301 | 2019-05-14 | 2712 | 2818 | 2686 |  2810 |  50800 |  2810 |
| 1301 | 2019-05-15 | 2806 | 2824 | 2766 |  2824 |  35500 |  2824 |
| 1301 | 2019-05-16 | 2824 | 2888 | 2811 |  2851 |  55600 |  2851 |
| 1301 | 2019-05-17 | 2852 | 2887 | 2833 |  2884 |  37300 |  2884 |
| 1301 | 2019-05-20 | 2894 | 2908 | 2850 |  2853 |  16000 |  2853 |
| 1301 | 2019-05-21 | 2849 | 2856 | 2808 |  2821 |  26900 |  2821 |
  .
  .
  .
16
21
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
21