現在Amazonサイトの書籍カテゴリーから書籍のタイトル部分を取り出すクローリングを行っています。
Rubyのライブラリのanemoneとnokogiriを用いて欲しい部分のURLを指定し、
anemoneのfocus_crawlメソッドを利用して巡回させるURLを絞り込みました。
require 'anemone' require 'nokogiri' require 'kconv' opts = { depth_limit:2, :delay => 1 } urls = [] #文学評論 urls.push("https://www.amazon.co.jp/s/ref=lp_466284_nr_n_0?fst=as%3Aoff&rh=n%3A465392%2Cn%3A%21465610%2Cn%3A466284%2Cn%3A548206&bbn=466284&ie=UTF8&qid=1479178349&rnid=466284") #文芸作品 urls.push("https://www.amazon.co.jp/s/ref=lp_466284_nr_n_1?fst=as%3Aoff&rh=n%3A465392%2Cn%3A%21465610%2Cn%3A466284%2Cn%3A507156&bbn=466284&ie=UTF8&qid=1479970894&rnid=466284") #歴史時代小説 urls.push("https://www.amazon.co.jp/s/ref=lp_466284_nr_n_2?fst=as%3Aoff&rh=n%3A465392%2Cn%3A%21465610%2Cn%3A466284%2Cn%3A507214&bbn=466284&ie=UTF8&qid=1479970894&rnid=466284") #経済社会小説 urls.push("https://www.amazon.co.jp/s/ref=lp_466284_nr_n_3?fst=as%3Aoff&rh=n%3A465392%2Cn%3A%21465610%2Cn%3A466284%2Cn%3A507216&bbn=466284&ie=UTF8&qid=1479970894&rnid=466284") #ミステリー urls.push("https://www.amazon.co.jp/s/ref=lp_466284_nr_n_4?fst=as%3Aoff&rh=n%3A465392%2Cn%3A%21465610%2Cn%3A466284%2Cn%3A507300&bbn=466284&ie=UTF8&qid=1479970894&rnid=466284") #SF urls.push("https://www.amazon.co.jp/s/ref=lp_466284_nr_n_5?fst=as%3Aoff&rh=n%3A465392%2Cn%3A%21465610%2Cn%3A466284%2Cn%3A507072&bbn=466284&ie=UTF8&qid=1479970894&rnid=466284") #ロマンス urls.push("https://www.amazon.co.jp/s/ref=lp_466284_nr_n_6?fst=as%3Aoff&rh=n%3A465392%2Cn%3A%21465610%2Cn%3A466284%2Cn%3A467258&bbn=466284&ie=UTF8&qid=1479970894&rnid=466284") #エッセー urls.push("https://www.amazon.co.jp/s/ref=lp_466284_nr_n_7?fst=as%3Aoff&rh=n%3A465392%2Cn%3A%21465610%2Cn%3A466284%2Cn%3A467260&bbn=466284&ie=UTF8&qid=1479970894&rnid=466284") #古典 urls.push("https://www.amazon.co.jp/s/ref=lp_466284_nr_n_8?fst=as%3Aoff&rh=n%3A465392%2Cn%3A%21465610%2Cn%3A466284%2Cn%3A467256&bbn=466284&ie=UTF8&qid=1479970894&rnid=466284") #詩歌 urls.push("https://www.amazon.co.jp/s/ref=lp_466284_nr_n_9?fst=as%3Aoff&rh=n%3A465392%2Cn%3A%21465610%2Cn%3A466284%2Cn%3A467266&bbn=466284&ie=UTF8&qid=1479970894&rnid=466284") #戯曲 urls.push("https://www.amazon.co.jp/s/ref=lp_466284_nr_n_10?fst=as%3Aoff&rh=n%3A465392%2Cn%3A%21465610%2Cn%3A466284%2Cn%3A467262&bbn=466284&ie=UTF8&qid=1479970894&rnid=466284") #評論 urls.push("https://www.amazon.co.jp/s/ref=lp_466284_nr_n_11?fst=as%3Aoff&rh=n%3A465392%2Cn%3A%21465610%2Cn%3A466284%2Cn%3A467264&bbn=466284&ie=UTF8&qid=1479970894&rnid=466284") #伝承 urls.push("https://www.amazon.co.jp/s/ref=lp_466284_nr_n_12?fst=as%3Aoff&rh=n%3A465392%2Cn%3A%21465610%2Cn%3A466284%2Cn%3A467252&bbn=466284&ie=UTF8&qid=1479970894&rnid=466284") #全集 Anemone.crawl(urls,opts)do|anemone| #巡回先の絞り込み #ページごとにどのリンク先を巡回するか指定する PATTERN = [%Q[//*[@id="pagnNextLink"]]] anemone.focus_crawl do |page| page.links.keep_if { |link| #link.to_s.match(PATTERN) } end # 正規表現で一致したページのみ処理 #PATTERN = %r[466298\/+|466282\/+|2291657051\/+|2291905051\/+] #anemone.on_pages_like(PATTERN) do |page| #puts page.url #end anemone.on_every_page do |page| for i in 0..25 num = [%Q[//*[@id="result_[i]"]]] end doc = Nokogiri::HTML.parse(page.body.toutf8) items = doc.xpath(num) #items += doc.xpath("//*[@id="result_1"]") items.each{|item| #タイトル puts item.xpath(%Q[div/div[3]/div[1]/a/h2]).text + "aaa" } end end コード
このプログラムを動かしても結果には何も表示されずに、コンパイルだけ通ってしまいます。
書籍タイトルを取ってくるにはどうすればよいのか教えていただきたいです。
よろしくお願いします。
あなたの回答
tips
プレビュー