日経255の構成銘柄一覧をRubyでスクレイピングして作成する


前回の記事では日経255の企業のうち取り出していたのは半分のみだった。原因は企業名を含むコンポーネントのクラス名に"commponent-list", commponent-list list-evenの2種類のうち前者のみを取り出していたためだった。

実現したいこと

nikkei255のサイトにアクセスし、CSV(No., コード, 会社名)を出力する。

#htmlを解析し、オブジェクト化
page = Nokogiri::HTML.parse(html, nil, charset)
nodes = page.css("div.component-list") #これでlist-evenも取り出すことができる
puts nodes #nodesはNokogiri::XML::NodeSetクラス

上を実行すると、下が出力される。

<div class="row component-list list-even">
    <div class="col-xs-3 col-sm-1_5">6361</div>
  <div class="col-xs-9 col-sm-2_5"><a      href="http://www.nikkei.com/markets/company/index.aspx?scode=6361">荏原</a></div>
  <div class="hidden-xs col-sm-8">(株)荏原製作所</div>
</div>

ここからNodeSet1つごとに, インデックス、コード、会社名を取り出し、配列にして出力したい。

作成したコード

require 'open-uri' #URLにアクセスする為のライブラリを読み込みます。
require 'nokogiri' #Nokogiriライブラリを読み込みます。
require 'csv'

#切り出すURLを指定します。
url = 'https://indexes.nikkei.co.jp/nkave/index/component?idx=nk225'

charset = nil
html = open(url) do |f|
  charset = f.charset #文字種別を取得します。
  f.read
end

#htmlを解析し、オブジェクト化
page = Nokogiri::HTML.parse(html, nil, charset)
nodes = page.css("div.component-list")

# 配列を初期化, 列名を入力
rows =  []
rows << ['No.', 'コード', '企業名']

# 1行ごとに行番号、企業コード、企業名を追加
nodes.each_with_index do |node, index|
  row = Array.new
  row << index + 1
  row << node.search('div.col-xs-3').text
  row << node.search('div.hidden-xs').text
  rows << row
end

# CSVファイルに保存
File.open("/Users/bupolang/projects/webscrape/nikkei255.csv", "w") do |f|
  #データをループ
  rows.each { |line_array|
    p line_array
    #1行ごとに実行
    line_array.each {|i|
      f.print(i)
      f.print(",")
    }

    #行末に改行コードを入力
    f.print "\n"
  }
end

結果

以下のようにCSV形式でデータを抽出することができた。

No. コード 企業名
1 4151 協和キリン(株)
2 4502 武田薬品工業(株)
3 4503 アステラス製薬(株)
4 4506 大日本住友製薬(株)
5 4507 塩野義製薬(株)
6 4519 中外製薬(株)
7 4523 エーザイ(株)
8 4568 第一三共(株)
9 4578 大塚ホールディングス(株)
10 3105 日清紡ホールディングス(株)
11 6479 ミネベアミツミ(株)
12 6501 (株)日立製作所
13 6503 三菱電機(株)
14 6504 富士電機(株)
15 6506 (株)安川電機
16 6645 オムロン(株)
17 6674 (株)ジーエス・ユアサ コーポレーション
18 6701 日本電気(株)
19 6702 富士通(株)
20 6703 沖電気工業(株)
21 6724 セイコーエプソン(株)
22 6752 パナソニック(株)
23 6758 ソニー(株)
24 6762 TDK(株)
25 6770 アルプスアルパイン(株)
26 6841 横河電機(株)
27 6857 (株)アドバンテスト
28 6902 (株)デンソー
29 6952 カシオ計算機(株)
30 6954 ファナック(株)
31 6971 京セラ(株)
32 6976 太陽誘電(株)
33 7735 (株)SCREENホールディングス
34 7751 キヤノン(株)
35 7752 (株)リコー
36 8035 東京エレクトロン(株)
37 7201 日産自動車(株)
38 7202 いすゞ自動車(株)
39 7203 トヨタ自動車(株)
40 7205 日野自動車(株)
41 7211 三菱自動車工業(株)
42 7261 マツダ(株)
43 7267 本田技研工業(株)
44 7269 スズキ(株)
45 7270 (株)SUBARU
46 7272 ヤマハ発動機(株)
47 4543 テルモ(株)
48 4902 コニカミノルタ(株)
49 7731 (株)ニコン
50 7733 オリンパス(株)
51 7762 シチズン時計(株)
52 9412 (株)スカパーJSATホールディングス
53 9432 日本電信電話(株)
54 9433 KDDI(株)
55 9437 (株)NTTドコモ
56 9613 (株)エヌ・ティ・ティ・データ
57 9984 ソフトバンクグループ(株)
58 7186 (株)コンコルディア・フィナンシャルグループ
59 8303 (株)新生銀行
60 8304 (株)あおぞら銀行
61 8306 (株)三菱UFJフィナンシャル・グループ
62 8308 (株)りそなホールディングス
63 8309 三井住友トラスト・ホールディングス(株)
64 8316 (株)三井住友フィナンシャルグループ
65 8331 (株)千葉銀行
66 8354 (株)ふくおかフィナンシャルグループ
67 8355 (株)静岡銀行
68 8411 (株)みずほフィナンシャルグループ
69 8253 (株)クレディセゾン
70 8601 (株)大和証券グループ本社
71 8604 野村ホールディングス(株)
72 8628 松井証券(株)
73 8630 SOMPOホールディングス(株)
74 8725 MS&ADインシュアランスグループホールディングス(株)
75 8729 ソニーフィナンシャルホールディングス(株)
76 8750 第一生命ホールディングス(株)
77 8766 東京海上ホールディングス(株)
78 8795 (株)T&Dホールディングス
79 1332 日本水産(株)
80 1333 マルハニチロ(株)
81 2002 (株)日清製粉グループ本社
82 2269 明治ホールディングス(株)
83 2282 日本ハム(株)
84 2501 サッポロホールディングス(株)
85 2502 アサヒグループホールディングス(株)
86 2503 キリンホールディングス(株)
87 2531 宝ホールディングス(株)
88 2801 キッコーマン(株)
89 2802 味の素(株)
90 2871 (株)ニチレイ
91 2914 日本たばこ産業(株)
92 3086 J.フロント リテイリング(株)
93 3099 (株)三越伊勢丹ホールディングス
94 3382 (株)セブン&アイ・ホールディングス
95 8028 (株)ファミリーマート
96 8233 (株)高島屋
97 8252 (株)丸井グループ
98 8267 イオン(株)
99 9983 (株)ファーストリテイリング
100 2413 エムスリー(株)
101 2432 (株)ディー・エヌ・エー
102 4324 (株)電通グループ
103 4689 Zホールディングス(株)
104 4704 トレンドマイクロ(株)
105 4751 (株)サイバーエージェント
106 4755 楽天(株)
107 6098 (株)リクルートホールディングス
108 6178 日本郵政(株)
109 9602 東宝(株)
110 9735 セコム(株)
111 9766 コナミホールディングス(株)
112 1605 国際石油開発帝石(株)
113 3101 東洋紡(株)
114 3103 ユニチカ(株)
115 3401 帝人(株)
116 3402 東レ(株)
117 3861 王子ホールディングス(株)
118 3863 日本製紙(株)
119 3405 (株)クラレ
120 3407 旭化成(株)
121 4004 昭和電工(株)
122 4005 住友化学(株)
123 4021 日産化学(株)
124 4042 東ソー(株)
125 4043 (株)トクヤマ
126 4061 デンカ(株)
127 4063 信越化学工業(株)
128 4183 三井化学(株)
129 4188 (株)三菱ケミカルホールディングス
130 4208 宇部興産(株)
131 4272 日本化薬(株)
132 4452 花王(株)
133 4631 DIC(株)
134 4901 富士フイルムホールディングス(株)
135 4911 (株)資生堂
136 6988 日東電工(株)
137 5019 出光興産(株)
138 5020 JXTGホールディングス(株)
139 5101 横浜ゴム(株)
140 5108 (株)ブリヂストン
141 5201 AGC(株)
142 5202 日本板硝子(株)
143 5214 日本電気硝子(株)
144 5232 住友大阪セメント(株)
145 5233 太平洋セメント(株)
146 5301 東海カーボン(株)
147 5332 TOTO(株)
148 5333 日本碍子(株)
149 5401 日本製鉄(株)
150 5406 (株)神戸製鋼所
151 5411 ジェイ エフ イー ホールディングス(株)
152 5541 大平洋金属(株)
153 3436 (株)SUMCO
154 5703 日本軽金属ホールディングス(株)
155 5706 三井金属鉱業(株)
156 5707 東邦亜鉛(株)
157 5711 三菱マテリアル(株)
158 5713 住友金属鉱山(株)
159 5714 DOWAホールディングス(株)
160 5801 古河電気工業(株)
161 5802 住友電気工業(株)
162 5803 (株)フジクラ
163 5901 東洋製罐グループホールディングス(株)
164 2768 双日(株)
165 8001 伊藤忠商事(株)
166 8002 丸紅(株)
167 8015 豊田通商(株)
168 8031 三井物産(株)
169 8053 住友商事(株)
170 8058 三菱商事(株)
171 1721 コムシスホールディングス(株)
172 1801 大成建設(株)
173 1802 (株)大林組
174 1803 清水建設(株)
175 1808 (株)長谷工コーポレーション
176 1812 鹿島建設(株)
177 1925 大和ハウス工業(株)
178 1928 積水ハウス(株)
179 1963 日揮ホールディングス(株)
180 5631 (株)日本製鋼所
181 6103 オークマ(株)
182 6113 (株)アマダホールディングス
183 6301 (株)小松製作所
184 6302 住友重機械工業(株)
185 6305 日立建機(株)
186 6326 (株)クボタ
187 6361 (株)荏原製作所
188 6367 ダイキン工業(株)
189 6471 日本精工(株)
190 6472 NTN(株)
191 6473 (株)ジェイテクト
192 7004 日立造船(株)
193 7011 三菱重工業(株)
194 7013 (株)IHI
195 7003 (株)三井E&Sホールディングス
196 7012 川崎重工業(株)
197 7832 (株)バンダイナムコホールディングス
198 7911 凸版印刷(株)
199 7912 大日本印刷(株)
200 7951 ヤマハ(株)
201 3289 東急不動産ホールディングス(株)
202 8801 三井不動産(株)
203 8802 三菱地所(株)
204 8804 東京建物(株)
205 8830 住友不動産(株)
206 9001 東武鉄道(株)
207 9005 東急(株)
208 9007 小田急電鉄(株)
209 9008 京王電鉄(株)
210 9009 京成電鉄(株)
211 9020 東日本旅客鉄道(株)
212 9021 西日本旅客鉄道(株)
213 9022 東海旅客鉄道(株)
214 9062 日本通運(株)
215 9064 ヤマトホールディングス(株)
216 9101 日本郵船(株)
217 9104 (株)商船三井
218 9107 川崎汽船(株)
219 9202 ANAホールディングス(株)
220 9301 三菱倉庫(株)
221 9501 東京電力ホールディングス(株)
222 9502 中部電力(株)
223 9503 関西電力(株)
224 9531 東京瓦斯(株)
225 9532 大阪瓦斯(株)