日本の全上場企業名一覧?の取得 [csv、tab区切り]

日本の全上場企業名一覧?をcsvで取得(重複あり)。
http://www.jpubb.com/様を利用させていただいています。

  • get.rb
require 'rubygems'
require 'hpricot'
require 'mechanize'
require 'kconv'
require 'uri'
$KCODE="u"



#exit();


str3="http://www.jpubb.com/list/list.php?se=dai2&pageID="
agent = Mechanize.new
agent.user_agent_alias="Windows IE 7"


tmp=agent.get("http://www.jpubb.com/list/")
doc=Hpricot( tmp.body);
j=(doc/"select.prs_src_sel")

#j2=(j/"option")
#puts j2[1]
#puts j[2]

jj=(j[2]/"optgroup")
#puts jj
f123=[];
l=0;
jj.each{|i|
        l=0;
        #puts i
        j2= (i/"option")
        j2.each{|kk|
                #puts j2
                if l>=1 then
#                       puts kk[:value]
                #       puts (kk/"*")[:value];
                        f123.push(kk[:value])
                end
                l=l+1;
        };

}
#puts f123;

#exit();
market_no=1;
f123.each{|market|
#market=f123[7];
#puts market


strk="http://www.jpubb.com/list/list.php?se="+market+"&pageID="
str4=strk+"1"


tmp=agent.get(str4).body
doc=Hpricot(tmp);
#puts doc
#j=((doc/"a[@title$=Last Page]"));

#puts j[0];
#puts j[0][:title]
j=(doc/"a[@title^=Go to]");
#puts j[1]
j2= (j.search("*:not(.nextprev)"));
j3= j2.map{|i| i.inner_text.to_i;}
no123= j3.max
if no123 == nil then
        no123=1;
end
#puts market+" "+no123.to_s;
#puts j;
#puts j2;

#puts j

#no123= j[0].inner_text.to_i;
#exit();
k=1;
no123.times(){|i|
#1.times(){|i|
#       puts i+1;
        #puts k;
        str3=strk+k.to_s

        response=agent.get(str3);
        doc=Hpricot(response.body);
        j=(doc/"table.corpTable")
        #puts j;
        link123="";
        (j/"tr").each{|f|
        #               puts k;
                        name=(f/"td.name").inner_text;
                        code=(f/"td.code").inner_text;

                        other=(f/"td.other").inner_text;
                        #other2=(((f/"td.other")/"a")[3]);

                        other2=(((f/"td.other")/"a"));
                        other2.each(){|link|
                                link123=link[:href]

                        }

                        other=other.split("|")[0,3].join("\t")


                        #puts other2;
                #link1=((f/"td.other")/"a")[3];
                        if name.length !=0
                        then
                                puts market+"\t"+market_no.to_s+"\t"+name+"\t"+code+"\t"+other+"\t"+link123.to_s;
                        end

        }

                        k=k+1;
                        sleep(0.3)
}

                        market_no=market_no+1;
}

ruby get.rb


出力例:タブ区切り(ダウンロード市場コード、ダウンロード市場番号、企業名、証券コード、産業、市場、都道府県、企業ホームページURL)

tou1 1 極洋 1301 水産・農林 東証一部 東京都 http://www.kyokuyo.co.jp/
tou1 1 日本水産 1332 水産・農林 東証一部,大証一部 東京都 http://www.nissui.co.jp


重複をとりたければ

ruby get.rb | awk '{print $3,$4,$5,$6,$7,$8}' | sort |uniq

もしくは、

tac all_market_list.csv | awk '{a[$4]=$0}END{for(i in a){print a[i]}}' | sort -k2,2g -k4,4g > all_market_list_uniq.csv

ちなみに全ての企業数は, 3548社。
のべ企業数(重複上場もふくめて数えるは)4396社

  • 重複上場

awk -F"\t" '{print $5}' all_market_list.csv | sort | uniq -c

1048 東証一部
869 JASDAQスタンダード
750 東証一部,大証一部
348 東証二部
206 東証一部,名証一部
175 東証マザーズ
158 大証二部
153 東証一部,大証一部,名証一部
136 名証二部
66 東証一部,大証一部,名証一部,札証,福証
56 東証二部,名証二部
56 東証二部,大証二部
50 JASDAQグロース
40 セントレックス
30 大証一部
27 東証一部,福証
26 福証
26 東証一部,大証一部,福証
24 東証一部,大証一部,名証一部,福証
18 東証一部,札証
18 Q-Board
16 アンビシャス
14 名証一部
10 東証二部,JASDAQスタンダード
10 大証二部,名証二部
9 札証
8 東証二部,福証
8 東証一部,大証一部,札証
6 東証一部,名証一部,福証
6 大証二部,福証
6 JASDAQスタンダード,名証二部
4 東証一部,JASDAQスタンダード
3 東証二部,札証
3 東証一部,大証一部,名証一部,札証
3 JASDAQスタンダード,福証
3 JASDAQスタンダード,札証
2 東証一部,名証一部,札証
2 東証一部,大証二部
2 東証一部,大証一部,札証,福証
1 東証マザーズ,札証