http://ranking.bunkyodo.co.jp/rankings/detail/0000/4
コチラのページから、タイトル、出版社名を取得したいと考えています。
lang
1<div class="col-sm-6"> 2 <div class="col-sm-2"><span class="text-danger">第1位</span></div> 3 <div class="col-sm-4"> 4 <img src="/img/cover/9784047340893.jpg" class="img-responsive" style="max-height: 150px; " alt="オーバーロード 10 謀略の統治者" /> </div> 5 <div class="col-sm-6"> 6 <h5 class="">オーバーロード 10 謀略の統治者</h5> 7 <p class="">KADOKAW</p> 8 </div> 9</div> 10 11<div class="col-sm-6"> 12 <div class="col-sm-2"><span class="text-danger">第6位</span></div> 13 <div class="col-sm-4"> 14 <img src="/img/cover/9784763135070.jpg" class="img-responsive" style="max-height: 150px; " alt="コーヒーが冷めないうちに" /> </div> 15 <div class="col-sm-6"> 16 <h5 class="">コーヒーが冷めないうちに</h5> 17 <p class="">サンマーク出版</p> 18 </div> 19</div> 20 </div> 21 22以下略
コードは以下のとおりです。
lang
1class Bunkyodo_scraping 2 def self.bunkyodo_ranking 3 agent = Mechanize.new 4 page = agent.get("http://ranking.bunkyodo.co.jp/rankings/detail/0000/4") 5 books = page.search('.col-sm-6') 6 books.each do |book| 7 rank = book.search('.col-sm-2').inner_text 8 title = book.search('h5').inner_text 9 publisher = book.search('p').inner_text 10 ranking_data = Bunkyodo.new(title: title, rank: rank, publisher: publisher) 11 ranking_data.save 12 end 13 end
これをコンソールで実行すると、以下のような実行内容になります。
lang
1[62] pry(main)> Bunkyodo_scraping.bunkyodo_ranking 2 (0.2ms) BEGIN 3 SQL (0.3ms) INSERT INTO `bunkyodos` (`title`, `rank`, `publisher`, `created_at`, `updated_at`) VALUES ('オーバーロード 10 謀略の統治者', 0, 'KADOKAW', '2016-06-06 06:05:00', '2016-06-06 06:05:00') 4 (0.4ms) COMMIT 5 (0.1ms) BEGIN 6 SQL (0.3ms) INSERT INTO `bunkyodos` (`title`, `publisher`, `created_at`, `updated_at`) VALUES ('', '', '2016-06-06 06:05:00', '2016-06-06 06:05:00') 7 (0.7ms) COMMIT 8 (0.1ms) BEGIN 9 SQL (0.3ms) INSERT INTO `bunkyodos` (`title`, `rank`, `publisher`, `created_at`, `updated_at`) VALUES ('コーヒーが冷めないうちに', 0, 'サンマーク出版', '2016-06-06 06:05:00', '2016-06-06 06:05:00') 10 (0.4ms) COMMIT 11 (0.1ms) BEGIN 12 SQL (0.3ms) INSERT INTO `bunkyodos` (`title`, `publisher`, `created_at`, `updated_at`) VALUES ('', '', '2016-06-06 06:05:00', '2016-06-06 06:05:00') 13 14 15以下略 16
titieとpublisherがなぜか2回取得されてしまいます。
該当ページのHTMLに「.col-sm-6」が2つあることが問題かと思うのですが、
解決策をご教授ください。よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/06/06 20:36 編集
2016/06/06 23:15