スクレイピングで見たことがないエラーが出て、調べてみたら日本語の記事が多くなかったので書いておきます。
エラー
concole
$ ruby scraping.rb
↓
エラー文
response_authenticate': 401 => Net::HTTPUnauthorized for https: URL名 -- no credentials found, provide some with #add_auth -- available realms: Application (Mechanize::UnauthorizedError)
原因
認証エラーっぽいです。。
Basic認証が使用されている場合、ユーザ名とパスワードの組み繋ぎ、
Base64で暗号化されて、サーバーに送信されるようです。
認証が必要なページにアクセスしようとした場合に、サーバ側は「Authorization」と言うヘッダーが
ブラウザからのリクエストに付いているかどうかを確認します。
最初にアクセスした時には「Authorization」ヘッダーがありませんのでブラウザに対して認証が必要になるみたいです
なので、上記の問題が発生した場合に対処できるのは、Authorizationヘッダーを自分で渡せばいいようです!
要はアクセスするためには認証用の暗号が必要ですよ!って言われているようです。
(間違っていればご指摘ください)
解決
require 'mechanize'
username = 'ユーザー名'
password = 'パスワード' #この辺は管理者に聞くしかないかと思われます、、
agent = Mechanize.new do |agent|
agent.pre_connect_hooks << lambda { |agent, request| request["Authorization"] = "Basic #{Base64.strict_encode64(username + ':' + password)}" }
end
page = agent.get("URL")
elements = page.search('a div') # a要素の下のdiv要素を検索
elements.each do |ele|
puts ele.inner_text # inner_textメソッドでテキストを取得
end
これでスクレイピング可能かと思います
参考