ruby+mechanizeでページのURLを取得

rubyでページのURL一覧を取得
例:ヤフーの長野県の検索結果のリンク

require "rubygems"
require "mechanize"
require "hpricot"
require "kconv"
require "uri"
$KCODE="u"


text="長野県"
search=URI.encode(text.toutf8)


URL="http://search.yahoo.co.jp/search?p="+search

agent=Mechanize.new()
page=agent.get(URL)
#puts agent.page.body

page.links.each{|link|

        puts link.text+" "+link.href

}

出力例(一部)

Yahoo! JAPAN http://www.yahoo.co.jp/
検索設定 http://search.yahoo.co.jp/search/preferences?pref_done=http%3A%2F%2Fsearch.yahoo.co.jp%2Fsearch%3Fp%3D%25E9%2595%25B7%25E9%2587%258E%25E7%259C%258C
この検索結果ページについて http://search.yahoo.co.jp/legacy/help.html?done=http%3A%2F%2Fsearch.yahoo.co.jp%2Fsearch%3Fp%3D%25E9%2595%25B7%25E9%2587%258E%25E7%259C%258C
長野県公式ホームページ - Web site 信州 - Nagano Prefectural ... http://www.pref.nagano.lg.jp/
長野県 - Wikipedia http://ja.wikipedia.org/wiki/%E9%95%B7%E9%87%8E%E7%9C%8C
さわやか信州旅.net : 長野県公式観光Webサイト http://www.nagano-tabi.net/
長野県 地図 :マピオン http://www.mapion.co.jp/map/admi20.html
北陸・甲信越 http://www.mapion.co.jp/map/area003.html
長野県 観光 - 旅行のクチコミサイト フォートラベル http://4travel.jp/domestic/area/koushinetsu/nagano/
ホーム http://4travel.jp/
国内旅行 http://4travel.jp/domestic/
信越旅行 http://4travel.jp/domestic/area/koushinetsu/
長野県とは - はてなキーワード http://d.hatena.ne.jp/keyword/%C4%B9%CC%EE%B8%A9
|

参考





require "rubygems"
require "mechanize"
require "hpricot"
require "kconv"
require "uri"
require "timeout"
#require "resolv"
require "resolv-replace"
$KCODE="u"

#Timeout
#Mechanize#open_timeout=10;
#Mechanize#read_timeout=10;


#text="\"http://ntt.co.jp\""
#text="\"a href=\"http://www.toyota.co.jp/\""
#text="link: www.ntt.co.jp -site: ntt.co.jp site: jp"
#text="link:www.ntt.co.jp href=\"www.ntt.co.jp/\""
#text="link:http://toyota.jp"
#tmp123="http://www.inpex.co.jp/"
#tmp123="http://www.dnp.co.jp/"
#tmp123="http://toyota.jp/"
#tmp123="http://www.honda.co.jp/"
#tmp123="http://www.tepco.co.jp/"
#tmp123="http://www.kddi.com/"

f=open("tousyouitibu_urllist2_tuzuki.txt")

f.each{|line|
begin
t1234=line.split(" ");
tmp123=t1234[1]
code=t1234[0]

#tmp123=ARGV[1]
#code=ARGV[0]
#tmp123="http://www.ntt.co.jp"
#tmp123="http://www.softbank.co.jp/"
#tmp123="http://www.yoshinoya.com/"
#tmp123="http://www.mcdonalds.co.jp/"
#tmp123="http://www.bk.mufg.jp/"
#tmp123="http://ja.wikipedia.org/wiki/%E4%B8%89%E8%8F%B1%E6%9D%B1%E4%BA%ACUFJ%E9%8A%80%E8%A1%8C/"
#text="link:http://www.dnp.co.jp"a

text="link:"+tmp123;

#text="link:"+tmp123+" "+"-site:"+tmp123;
search=URI.encode(text.toutf8)
#puts text

#URL="http://search.yahoo.co.jp/search?p="+search+"&n=100"

url2="http://search.yahoo.co.jp/search?p="+search+"&n=100"
#puts URL2
#exit()

agent=Mechanize.new()

#Time out
agent.read_timeout=10;
agent.open_timeout=10;
agent.max_history=1;

#URL2="http://yahoo.com.jp"
#puts "URL2";
begin

        page=agent.get(url2)
#       puts page.header

rescue
        #puts ex.response_code;
        puts "Time out!"
end



text2=Hpricot(page.body)
str=(text2/"#inf")

str2= str.inner_html.toutf8;
str3=(str2.gsub(/.*/,"")).gsub(/.*/,"").to_i;
#puts str3




q=1;
page.links.each{|link|
        begin
        timeout(10){
        t2=Thread.new do
                begin
                        agent2=Mechanize.new()

                        agent2.read_timeout=10;
                        agent2.open_timeout=10;
                        agent2.max_history=1;

                        qq=Hpricot(agent2.get(link.href).body);

                        #qq=Hpricot(agent2.get(link.href).body);

                        str="a[@href$='"+tmp123+"']"
                        jj= (qq/str)
                        puts code+"\t\t\t"+q.to_s+"\t\t\t"+jj.inner_html.toutf8.chomp+"\t\t\t"+link.href.chomp

                        agent2.close();
                rescue Exception
                        #puts "Exception"
                end
        end
        t2.join()
        q=q+1;
        }

        rescue Exception

                Thread::kill(t2);
        end
}

maxlen=[str3/100,9].min;

page=""
#exit();
for i in 1..maxlen

        b=i*100+1
        #puts "bbbbbbbb"+b.to_s;
        begin
                        #agent2=Mechanize.new()
                page=agent.get(url2+"&b="+b.to_s)
                sleep 3;
                #puts page.body
        rescue Exception
                #puts "Exception2"

        end
                        page.links.each{|link|
                        begin
                        timeout(10){
                        t2=Thread.new do
                                begin

                                        agent2=Mechanize.new()

                                        agent2.read_timeout=10;
                                        agent2.open_timeout=10;
                                        agent2.max_history=1;
                                        qq=Hpricot(agent2.get(link.href).body);


                                        str="a[@href$='"+tmp123+"']"
                                        jj= (qq/str)

                                        puts code+"\t\t\t"+q.to_s+"\t\t\t"+jj.inner_html.toutf8.chomp+"\t\t\t"+link.href.chomp
                                        agent2.close();
                                rescue Exception
                                        #puts "Exception"
                                end
                        #q=q+1;
                        end
                        q=q+1;
                        t2.join();
                        }
                        rescue Exception
                                #puts "Timeout123";
                                Thread::kill(t2);
                        end
                }

end
sleep 3;
agent.close();
rescue Exception
        #puts "Last"
end
}