ページネーションにそって次々スクレイピングしていきたいんですが、urlにeach文を回して数字順にリンクを変えていくという方法をとりました。
require "open-uri" require "nokogiri" (2..5).each do |i| url = "https://ameblo.jp/alexander1203/entrylist-#{i}.html" user_agent = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.63 Safari/537.36' charset = nil html = open(url, "User-Agent" => user_agent) do |f| charset = f.charset f.read end doc = Nokogiri::HTML.parse(html, nil, charset) puts doc.css("#main > div.skin-blogArchive > div.skin-blogArchiveBody.skin-bgMain > ul > li> div > div:nth-child(2) > h2 > a").inner_text puts "---------------------------------------------" end
このコードでうまくいったのですが、次はこの結果をviewを通してブラウザで表示したいのです。
しかし、ブラウザ上では全てが表示されず、最後のページの結果だけ表示されている状態になります。
コントローラー↓
def top require "open-uri" require "nokogiri" (2..5).each do |i| url = "https://ameblo.jp/alexander1203/entrylist-#{i}.html" user_agent = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.63 Safari/537.36' charset = nil html = open(url, "User-Agent" => user_agent) do |f| charset = f.charset f.read end doc = Nokogiri::HTML.parse(html, nil, charset) @titles = [] doc.css("#main > div.skin-blogArchive > div.skin-blogArchiveBody.skin-bgMain > ul > li> div > div:nth-child(2) > h2 > a").each do |row| @titles << row end end end
ビュー↓
<% @titles.each do |title| %> <div> <%= title.text %> </div> <% end %>
また、根本的にこのやり方ではおかしかったり、他に効率的なやり方があれば教えてください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/05 01:26