Capybara を使ってページのリンクを取得する方法のテストです。

次の環境で確認しました。

$ uname -a
Linux iwata 4.15.9-1-ARCH #1 SMP PREEMPT Sun Mar 11 17:54:33 UTC 2018 x86_64 GNU/Linux
[uchida@iwata capybara]$ ruby --version
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]

前提となるソフトのインストール

gem install capybara
gem install selenium-webdriver

ドライバーのダウンロード

wget https://github.com/mozilla/geckodriver/releases/download/v0.20.0/geckodriver-v0.20.0-linux64.tar.gz
tar xvfz geckodriver-v0.20.0-linux64.tar.gz

https://ekzemplaro.org で div id が "items" にあるリンクを取得するプログラムです。

crawler_screenshot.rb
#! /usr/bin/ruby
# -*- coding: utf-8 -*-
#
#   crawler_screenshot.rb
#
#                       Mar/20/2018
# ---------------------------------------------------------------------
require 'capybara'
require 'capybara/dsl'
require 'selenium-webdriver'
require 'uri'

# ---------------------------------------------------------------------
Capybara.current_driver = :selenium
Capybara.app_host = "https://ekzemplaro.org"
Capybara.default_max_wait_time = 20

# ---------------------------------------------------------------------
module Crawler
    class LinkChecker
        include Capybara::DSL

        def initialize()
            visit('')
        end

        def find_links
            @links = []

            within(:xpath, '//*[@id="items"]') do
                all('a').each do |a|
                    uu = a[:href]
                    next if uu.nil? or uu.empty?
                    @links << uu

                    break if @links.size >= 20
                end
            end

            @links.uniq!
            @links
        end
    end
end

# ---------------------------------------------------------------------
STDERR.puts "*** 開始 ***"
#
base = URI.parse(Capybara.app_host)
crawler = Crawler::LinkChecker.new
links = crawler.find_links
links.each.with_index {|link,index| 
        puts link
}
#
STDERR.puts "*** 終了 ***"
#
# ---------------------------------------------------------------------

実行コマンド (geckodriver のあるフォルダーで実行)

export PATH=$PATH:./
#
./crawler_screenshot.rb
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.