Hatena::ブログ(Diary)

そもさん&せっぱさん

2010-12-19

日本の国会議員の名前とウェブサイトのURLのリストを得るRubyスクリプト

やっつけです。タブ区切りで標準出力に吐きます。

ソースとして

政治家WEBリンク集

http://db.kosonippon.org/link/link.php

を使いました。

ちなみに

  • 衆議院 480 + 参議院 242 = 722
  • このスクリプトで得た件数 = 676

です。食い違いの理由については「ウェブサイトを持っていない議員もいる」などが考えられますが、実際のところは分かりません。

# -*- coding: utf-8 -*-

# author: sonota
# license: MIT

require "rubygems"
require "open-uri"
require "nokogiri"
require "pp"

Giin = Struct.new "Giin", :name, :url, :party
class Giin
  def to_tsv_row
    [self.name, self.party, self.url].join("\t")
  end
end

def tds_to_giins(tds)
  list = []
  while tds.size > 0
    td1 = tds.shift
    td2 = tds.shift

    g = Giin.new
    g.url = td1.css("a")[0].attr(:href)
    />(.+?)<br/ =~ td2.to_s
    g.name = $1
    />\s*(.+?)\s*<\/font/ =~ td2.to_s
    g.party = $1

    list << g
  end
  list
end

base_url = "http://db.kosonippon.org/link/link.php?sort=name&tab="
giins = []

# あ行からわ行まで
(1..10).each{|tab|
  url = "#{base_url}#{tab}"
  doc = Nokogiri::HTML( open(url) )
  tds = doc.css("table.table3 td")
  temp_giins = tds_to_giins(tds)
  STDERR.puts url, temp_giins.size
  giins += temp_giins
  sleep 2
}

puts giins.map{|giin|
  giin.to_tsv_row
}.join("\n")

追記

URL載ってるCSVありましたorz

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/sonota88/20101219/1292773669