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

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

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

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

2002閲覧

RailsのMechanizeメソッドを使ったスクレイピングについて

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2016/05/09 08:46

ruby on railsのmechanizeメソッドでスクレイピングをしたいと考えております。

以下のようなHTMLがあります。

lang

1<table> 2 <tr> 3 <th class="MagPriTab_MagNa">雑誌名</th> 4 <th class="MagPriTab_PubNa">出版社名</th> 5 <th>印刷証明付き発行部数</th> 6 </tr> 7 <tr> 8 <td class="MagDataTab_MagNa"><a href="http://withonline.jp/" target="_blank">with</a></td> 9 <td>講談社</td> 10 <td class="MagDataTab_count">200,000</td> 11 </tr> 12 <tr> 13 <td class="MagDataTab_MagNa"><a href="http://more.shueisha.co.jp" target="_blank">MORE</a></td> 14 <td>集英社</td> 15 <td class="MagDataTab_count">256,667</td> 16 </tr> 17 <tr> 18 <td class="MagDataTab_MagNa"><a href="http://www.shufu.co.jp" target="_blank">ar</a></td> 19 <td>主婦と生活社</td> 20 <td class="MagDataTab_count">121,067</td> 21 </tr> 22 </table>

ここから、

<td class="MagDataTab_count">200,000</td> <td class="MagDataTab_count">256,667</td> <td class="MagDataTab_count">121,067</td>

のタグから数字を取り出したいのですが、上手くいきません。
数字自体は取得できるのですが、なぜか数字が連結してしまいます。

スクレイピングのメソッド自体は以下のようなコードを書いています。

lang

1def self.mag_association 2 counts = [] 3 agent = Mechanize.new 4 page = agent.get("http://www.j-magazine.or.jp/magadata/index.php?module=list&action=list&cat1cd=2&cat3cd=19&period_cd=31") 5 circulations = page.search('.MagDataTab') 6 circulations.each do |numbers| 7 circulation = numbers.search('.MagDataTab_count').inner_text 8 magazine = Magazine.new(circulation: circulation) 9 magazine.save 10 end 11 end

ターミナルのコンソールで実行すると以下のように表示されます。

lang

1[23] pry(main)> Scraping.mag_association 2 (0.2ms) BEGIN 3 SQL (1.1ms) INSERT INTO `magazines` (`circulation`, `created_at`, `updated_at`) VALUES ('200,000256,667121,067', '2016-05-09 08:42:18', '2016-05-09 08:42:18') 4

さきほど紹介したHTMLコード

lang

1<td class="MagDataTab_count">200,000</td> 2 <td class="MagDataTab_count">256,667</td> 3<td class="MagDataTab_count">121,067</td>

このタグ内の数字がなぜか連結してしまい、"200,000256,667121,067"と表示されていることが問題点です。

解決策をご教授いただけると幸いです。よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

searchは Nokogiri::XML::NodeSet を返すのでは?
今回の場合、セレクタ .MagDataTab_count に該当する複数の要素が返されているようです。
さらに each で回せば、目的の結果が得られませんでしょうか。

lang

1def mag_association 2 agent = Mechanize.new 3 page = agent.get("http://www.j-magazine.or.jp/magadata/index.php?module=list&action=list&cat1cd=2&cat3cd=19&period_cd=31") 4 circulations = page.search('.MagDataTab') 5 circulations.each do |numbers| 6 circulation = numbers.search('.MagDataTab_count') 7 circulation.each do |count| 8 puts "count = #{count.inner_text}" 9 end 10 end 11end

投稿2016/05/09 13:00

q1701

総合スコア274

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

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

退会済みユーザー

退会済みユーザー

2016/05/10 03:18

ありがとうございます!無事に期待する出力が得られました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問