よろしくお願いします。
Rubyで作成したスクレイピングのプログラムが毎回実行結果が変わってしまいます。
###前提・実現したいこと→実行結果が毎回変わってしまう原因・想定していた実行結果をエられるように修正したいので、アドバイスが欲しい。
アマゾンの本のカテゴリ名を表示するプログラム練習としてをサンプルを参考に作成しました。
想定していた実行結果が得られませんでした。
コードをどのように修正すればいいでしょうか?
###試したこと
一回目
$ ruby scraping.rb / / / / Kindleストア/ビジネス・経済 / Kindleストア/コンピュータ・IT
二回目
$ ruby scraping.rb / / / / / /
三回目
$ ruby scraping.rb / / / / / 本/ビジネス・経済
四回目
$ ruby scraping.rb / / / / /
五回目
$ ruby scraping.rb / 本/ビジネス・経済 / 本/コンピュータ・IT / Kindleストア/ビジネス・経済 / Kindleストア/コンピュータ・IT
です。
###該当のソースコード
Ruby
1#scraping.rb(該当のコード) 2 # -*- coding: utf-8 -*- 3 require 'anemone' 4 require 'nokogiri' 5 require 'kconv' 6 7 urls = [] 8 urls.push("http://www.amazon.co.jp/gp/bestsellers/digital-text/2291657051/") 9 urls.push("http://www.amazon.co.jp/gp/bestsellers/digital-text/2291905051/") 10 urls.push("http://www.amazon.co.jp/gp/bestsellers/books/466298/") 11 urls.push("http://www.amazon.co.jp/gp/bestsellers/books/466282/") 12 13 Anemone.crawl(urls, :depth_limit => 0) do |anemone| 14 anemone.on_every_page do |page| 15 # 文字コードをUTF8に変換したうえで、Nokogiriでパース 16 doc = Nokogiri::HTML.parse(page.body.toutf8) 17 18 category = doc.xpath("//*[@id='zg_browseRoot']/ul/li/a").text 19 20 # カテゴリ名の表示 21 sub_category = doc.xpath("//*[@id=\"zg_listTitle\"]/span").text 22 23 puts category+"/"+sub_category 24 end 25 end 26
Ruby
1urls = [] 2 urls.push("http://www.amazon.co.jp/gp/bestsellers/digital-text/2291657051/") 3 urls.push("http://www.amazon.co.jp/gp/bestsellers/digital-text/2291905051/") 4 urls.push("http://www.amazon.co.jp/gp/bestsellers/books/466298/") 5 urls.push("http://www.amazon.co.jp/gp/bestsellers/books/466282/")
の部分でURLを予め指定していて、
Ruby
1 Anemone.crawl(urls, :depth_limit => 0) do |anemone| 2 anemone.on_every_page do |page| 3 # 文字コードをUTF8に変換したうえで、Nokogiriでパース 4 doc = Nokogiri::HTML.parse(page.body.toutf8) 5 6 category = doc.xpath("//*[@id='zg_browseRoot']/ul/li/a").text 7 8 # カテゴリ名の表示 9 sub_category = doc.xpath("//*[@id=\"zg_listTitle\"]/span").text 10 11 puts category+"/"+sub_category 12 end
の部分で順番にアクセスをして行き、カテゴリ名を取得・表示している(コメント文の通り?)という処理という解釈をしております。
そうなると、想定していた実行結果と異なります。
想定が間違っている、あるいはコードが間違っていると思うのですが、
よく分かりませんでした。
アドバイスいただけないでしょうか?
###想定していた実行結果
$ ruby scraping.rb Kindleストア/コンピュータ・IT 本/コンピュータ・IT Kindleストア/ビジネス・経済 本/ビジネス・経済
毎回実行しても同じ結果が得られると思っています。
###補足情報(言語/FW/ツール等のバージョンなど)
環境はUbuntu15.10
$ ruby -v ruby 2.2.4p230 (2015-12-16 revision 53155) [x86_64-linux]
です。
何卒よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。