Ruby Mechanize使い方

Rubyのgemである「 Mechanize」を使ってスクレイピングするやり方です。
似てるgemでは「selenium-webdriver」がありますが、javascrptを使ってるサイトなどでは便利ですがブラウザを使わない分 Mechanizeのほうが早いです。
そんな Mechanizeの使い方です。

searchメソッド


cssと同じ要領で要素を取得できます。

get_attributeメソッド


hrefやsrcなどの属性の値を取り出すメソッドです

require "mechanize"
BASE_URL = "https://nashiblog.netlify.app/"

d = Mechanize.new 
page = d.get(BASE_URL)
lists = page.search("a")    #searchメソッドの使い方

lists.each do |list|
    puts list.get_attribute(:href)    #get_attributeメソッドの使い方
    sleep 1
end



inner_textメソッド


タグの中身の値を取り出します。

require "mechanize"
BASE_URL = "https://nashiblog.netlify.app/"

d = Mechanize.new 
page = d.get(BASE_URL)
lists = page.search("a")

lists.each do |list|
    puts list.inner_text   #inner_textメソッドの使い方
    sleep 1
end


link_withメソッド


require "mechanize"
BASE_URL = "https://nashiblog.netlify.app/"

d = Mechanize.new 
page = d.get(BASE_URL)

text_link = page.link_with(text: "転移したいリンクテキスト").click  #リンク先のテキストをターゲットにクリック
puts text_link.body  #リンク先テキストを出力


Mechanize リンクの取得


require "mechanize"

BASE_URL = "https://nashiblog.netlify.app/"

d = Mechanize.new 
page = d.get(BASE_URL)
list = page.links
list.each do |o|
    p o.text
end


リンク先をクリックして転移する


require "mechanize"

BASE_URL = "https://www.amazon.co.jp/"

d = Mechanize.new 
page = d.get(BASE_URL)

link_text = page.link_with(text: "Amazon プライム").click
#urlを取得して転移する場合 link_with(href: "url").click

puts link_text.body


ログインが必要なサイトにスクレイピング


d = Mechanize.new 
page = d.get(BASE_URL)

login_id = page.form_with(id: "id")
login_id.field_with(name:"id").value = "id"
login_id.field_with(name:"password").value = "password"
login_path = d.submit(login_id)

puts login_path.body


ログイン後クッキーを取得する方法


d = Mechanize.new 
page = d.get(BASE_URL)

login_id = page.form_with(id: "id")
login_id.field_with(name:"id").value = "id"
login_id.field_with(name:"password").value = "password"
login_path = d.submit(login_id)

#ここからクッキーを取得する部分
cookies = page.cookie_jar
info = cookies.map{|cookie| cookie}



ユーザーエージェント文字列を既存のブラウザで偽装する


agent.user_agent_alias  =  "windows IE 7"

#アクセス時のログを設定したい場合
require "logger"
agent.log = Logger.new("log.txt")



過去にアクセスしたページをURLで指定して呼び出す


agent = Mechanize.new
agent.get(url_1)
agent.get(url_2)

#visited_pageを使用する
agent.visited_page(url_1) #url_1に移動する