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 }