こちら自己解決できましたので共有します。
まず最初にコードです。質問時から大きく変わっている(特にscraping modelを追加している為)ので後から、僕のわかる範囲で補足してみます。
model
1# scraping model
2
3require 'mechanize'
4
5class Scraping < ApplicationRecord
6
7 def self.fuga_urls
8 links = []
9 agent = Mechanize.new
10 current_page = agent.get("https://xxxxxxxx")
11 elements = current_page.search('.ranking-list .item a')
12 elements.each do |ele|
13 links << ele.get_attribute('href')
14 end
15
16 links.each do |link|
17 get_scraping('https://xxxxxxxx/' + link)
18 end
19 end
20
21 def self.get_scraping(link)
22 agent = agent = Mechanize.new
23 page = agent.get(link)
24
25 title = page.at('.arti-header .head').inner_text
26 image_url = page.at('.figure-area img')[:src] if page.at('.figure-area img')
27 detail = page.at('.arti-body').inner_text
28
29 scraping = Scraping.new(title: title, image_url: image_url, detail: detail)
30 scraping.save
31 end
32end
controller
1class ScrapingsController < ApplicationController
2
3 def index
4 @scrapings = Scraping.all
5 end
6
7 def show
8 @scraping = Scraping.find(params[:id])
9 end
10end
11
index
1# 一覧画面
2
3<div>
4 <% @scrapings.each do |scraping| %>
5 <p><img src="https://xxxxxxx/<%= scraping.image_url %>"></p>
6 <p><%= link_to scraping.title, scraping_path(scraping) %></p>
7 <% end %>
8</div>
show
1# 詳細ページ
2
3<p><%= @scraping.title %></p>
4<p><img src="https://xxxxxxx/<%= @scraping.image_url %>"></p>
5<p><%= @scraping.detail %></p>
上記のコードで質問時の目的である「mechanizeで取得した情報に
詳細ページへのリンクを取得」することができました。
説明に入る前に大いに参考になった記事を2つ紹介します。
https://qiita.com/takuyanin/items/01256773e1cbfc84f51a
https://chkc.hatenablog.com/entry/2019/07/24/190213
特に2つめの記事はとても役に立つと思います。
今回の問題を解消するために重要なのは下記の2点です。
- MVCのうち欠けていたスクレイピング用のModelを作成する。
- スクレイピングで得た情報はデータベースに保存しなければならない
質問時のコードを見ていただければわかると思いますが僕はmodelも作らず、
データベースへの保存もしないまま詳細ページを設定しようとしていました。
「サイトからタイトルや画像を抽出し一覧(index)ページに並べることはできた」
とありますがこれはあくまで対象のデータから情報を抽出して表示させただけにすぎません。
そのため個別のidを持つはずもなく詳細ページへのリンクが設定できることもありません。
モデルでは対象のページの記事のタイトル、画像URL、本文を抽出しています。
前提ではありますが自分の抽出したい情報に合わせてモデルにカラムを追加し、
取り出せるようにしておくことが必要になります。
考えてみればMVCが機能していなかったというとても初歩的な原因だったのですが、
スクレイピングという新しいことに挑戦していたこともあり複雑に考えすぎていたようです。
スクレイピングの記事はタイトルのみの抽出は情報の表示のみを紹介する記事
がほとんどだったのでアウトプットもかねて共有してみました。
誰かの役に立てると嬉しいです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。