質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

1364閲覧

Rubyで作成したスクレイピングのプログラムが毎回実行結果が変わってしまう

dlrowolleh

総合スコア120

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/11/10 06:40

編集2016/11/11 04:37

よろしくお願いします。
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]

です。
何卒よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

「取得しているHTMLが違うから」という自明なこと以外にはないと思います。

投稿2016/11/10 07:07

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問