用意するもの
ソフトウェア・情報処理
システム,818 開発,707 事業,367 サービス,364 企業,354 技術,302 提供,300 お客様,270 IT,263 情報,198
情報(通信・マスコミ)
事業,441 企業,272 広告,241 制作,222 会社,220 情報,199 サービス,178 企画,159 年,153 たち,148
金融・証券・保険
事業,574 保険,355 お客様,315 サービス,294 企業,276 金融,272 販売,264 提供,244 業務,232 会社,230
商社
事業,467 販売,393 展開,232 お客様,226 企業,214 たち,187 提供,181 私,180 商品,175 開発,174
まぁだからなんだよって話だけど
リクナビに自動ログイン
UA偽装は不要かもだけど念の為。
agent = Mechanize.new agent.user_agent_alias = 'Linux Firefox' USER = 'oppai' PASS = '114514' agent.get("https://job.rikunabi.com/2016/auth/topLoginform/") do |login_page| login_page.form_with(name: 'auth_indexActionForm') do |login| login['rikunabiCd'] = USER login['password'] = PASS end.click_button end
企業の紹介文をすっぱ抜く
- TOPページのナビゲーションバーより「企業検索」
- 「業種から探す」を選んで試しにソフトウェア・情報処理を選択
- URLは「http://job.rikunabi.com/2016/s/6________/?moduleCd=100&kdb=BUB」なのでこれをeachで回す
自動で最後までのページ取得してもいいけど即興なので6までと指定してあげる
取得したデータは適当にMySQLにでも保存
1.upto(6) do |i| agent.get("https://job.rikunabi.com/2016/s/6________/?moduleCd=100&kdb=BB&pn=#{i}") do |page| html = Nokogiri::HTML(page.body) html.css('.g_search_cst_cnt').each do |corp| name = corp.css('p b a').text text = corp.css('.g_lnk_noline').text.gsub(/続きを読む/, "") Corp.create( name: name, text: text ) end end end
頻出度を調べる
文章の形態素解析にはMecab&Nattoを利用 名詞のみ対象にして配列に集計していく
nm = Natto::MeCab.new words_map = {} Corp.all.each do |c| nm.parse(c.text) do |n| feature = n.feature.split(',') surface = n.surface next if feature.first != "名詞" words_map[surface] ||= 0 words_map[surface] += 1 end end words_map = words_map.sort_by {|k, v| -v}
あとはCSVなりデータベースに打ち込めばおk
以下全文
require 'bundler' Bundler.require ActiveRecord::Base.configurations = YAML.load_file('database.yml') ActiveRecord::Base.establish_connection(:development) class Corp < ActiveRecord::Base end agent = Mechanize.new agent.user_agent_alias = 'Linux Firefox' USER = 'oppai' PASS = '114514' agent.get("https://job.rikunabi.com/2016/auth/topLoginform/") do |login_page| login_page.form_with(name: 'auth_indexActionForm') do |login| login['rikunabiCd'] = USER login['password'] = PASS end.click_button end 1.upto(6) do |i| agent.get("https://job.rikunabi.com/2016/s/6________/?moduleCd=100&kdb=BB&pn=#{i}") do |page| html = Nokogiri::HTML(page.body) html.css('.g_search_cst_cnt').each do |corp| name = corp.css('p b a').text text = corp.css('.g_lnk_noline').text.gsub(/続きを読む/, "") Corp.create( name: name, text: text ) end end end
require 'bundler' Bundler.require ActiveRecord::Base.configurations = YAML.load_file('database.yml') ActiveRecord::Base.establish_connection(:development) class Corp < ActiveRecord::Base end nm = Natto::MeCab.new words_map = {} Corp.all.each do |c| nm.parse(c.text) do |n| feature = n.feature.split(',') #名詞,一般,*,*,*,*,単語,タンゴ,タンゴ surface = n.surface next if feature.first != "名詞" words_map[surface] ||= 0 words_map[surface] += 1 end end words_map = words_map.sort_by {|k, v| -v} File.open('/tmp/t.csv','w'){|f| words_map.each do |word, count| f.write "#{word},#{count}\n" end }
Gemfile
source "https://rubygems.org" gem "nokogiri" gem "mechanize" gem "activerecord", :require => 'active_record' gem "mysql2" gem "natto"