わからないこと
こちらのサイトから大学の名前と生徒数をスクレイピングして情報を抜き出すことができたのですが、それをsqlite3のデータベースに入れる方法がわかりません。
ちなみにコードはこちらを参考にしています。
対象のコード
require 'nokogiri' html = <<EOF <div class="Article__content">... ... ... EOF html = Nokogiri::HTML(html) # 正規表現で、順位, 大学名, 在籍者数を含む文字列を抜き出し def extract_universities(html) regexp = /([0-91234567890]{1,3}位:[○ ● ▲ ◆][^)]+))/ _, *data = html.text.split(regexp) .filter { |x| x.include?('大学') } data end # 順位の全角数字 (1 〜 9位) を半角に変換 def parse_ranking_number(str) case str when '1' 1 when '2' 2 when '3' 3 when '4' 4 when '5' 5 when '6' 6 when '7' 7 when '8' 8 when '9' 9 else str.to_i end end # 順位, 大学名, 在籍者数を含む文字列をそれら要素ごとに分解して Hash に纏める def parse_to_hash(universities_info_list) universities_info_list.map do |x| ranking, university_name = x.split(/位:[○ ● ▲ ◆]/) university_name, number_of_students = university_name.to_s.split(/(/) next if university_name.nil? { ranking: parse_ranking_number(ranking), name: university_name, number_of_students: number_of_students.to_s.delete('),').to_i } end end data = extract_universities(html) # => ["1位:○日本大学(67,353)", ...] pp parse_to_hash(data).compact # => [{:ranking=>1, :name=>"日本大学", :number_of_students=>67353}, ...]
以上のようにして取得したデータを-
|:id|:name:|student_number:|
|1|日本大学|67353|
|2|hoge大学|60000|
|3|hogehoge大学|50000|
.
.
.
のようにデータベースに一気に保存したいです
回答1件
あなたの回答
tips
プレビュー