未分類

Mechnaizeの基本

投稿日:

環境:Windows10Pro64bit、Ruby2.4

【注意事項】

  • スクレイピングはWebサイトの注意事項等を読んで適切に行いましょう。
  • ログインに機能に何かしらごにょごにょしたものが実装されていた場合、すぐにseleniumにシフトしたほうがいいと思います。個人的にmechanizeは一般的なログインフォームに利用します。

イメージ

Webの情報取得方法に関して、勝手に順番をつけています。

  1. nokogiri
  2. mechanize
  3. selenium

今回はシンプルなログイン認証を突破してWeb情報を取得する方法です。

流れは次のイメージです。

  1. Mechanizeをnewする(インスタンス化する)
  2. ログインURLを準備する
  3. ログインページを取得する(アカウント入力フォームがあるページ)
  4. アカウント入力フォームを取得する
  5. フォームに値を割り当てる
  6. submitして認証を得る(Mechanizeのインスタンス「agent」にセッションが保存される…らしい)
  7. アカウント権限の範囲内でWeb情報を取得できる

コード+解説

#1. Mechanizeをnewする(インスタンス化する)
agent = Mechanize.new

#2. ログインURLを準備する
loginpage_url = "https://www~~~~"

#3. ログインページを取得する(アカウント入力フォームがあるページ)
login_page = agent.get(loginpage_url) #1と2を省略して、3から始めてもいい。4から始めてもいい

#4. アカウント入力フォームを取得する
login_form = login_page.form_with(name: "form") #フォームを特定できる属性と値

#5. 各フォームに値を割り当てる(テキスト入力しているというイメージ)
login_form.field_with(name: "user").value = "username"
login_form.field_with(name: "password").value = "ppassword"

#6. submitして認証を得る(Mechanizeのインスタンス「agent」にセッションが保存される…らしい)以下、どちらでもいい
agent.submit(login_form)
mypage_top = agent.submit(login_form)

#7. アカウント権限の範囲内でWeb情報を取得できる
locked_page = agent.get("https://~~~~~")

コードのみ

agent = Mechanize.new
page = agent.get("https://~~~")

form = page.form_with(name: "form")
form.field_with(name: "user").value = "username"
form.field_with(name: "password").value = "password"

agent.submit(form)

#【余談】フォーム取得のもう一つのメソッド
form = page.forms[0]

もっと簡単な流れ

  1. ログインページアクセス
  2. ログインフォーム取得
  3. フォーム入力
  4. 送信
  5. セッションゲット

認証突破後のWeb情報取得

Mechanizeのまま行うか、Nokogiriに移行するか。

mechanizeのまま行うと良いこともあります。
リンクやボタンを押すことができるので、そのままページ移動・ページ取得ができる。

Google検索「ruby mechanize メソッド 一覧」などで検索すると色々出てきます。

Nokogiriに移行するのに利用するメソッド「.content」

返り値はStringです。この「content」メソッドを利用してNokogiriに渡します。

#pageはagent.get()で取得したもの
nokogiri = Nokogiri::HMTL(page.content.toutf8)
i_want = nokogiri.css("div #test") #普通のスクレイピングのように活用できる

最後に

最初の注意にも書きましたが、ログインフォームをごにょごにょ何かしたトランスフォーマーしていたら、私はすぐにseleniumで実装したほうが無難かなと思いっています。









-未分類

執筆者:

関連記事

no image

Rubyチートページ

※何かしらの入門本を一度は読んだという人向け 目次1 インデックス1.1 Ruby実行1.2 文字出力1.3 変数1.4 配列1.5 配列eachメソッド1.6 ハッシュ1.7 ハッシュeachメソッ …

no image

小さなことからぐるぐる回すこと。あと炎上の対応方法というかスタンスについて。

目次1 根拠なき言いたいこと1.1 注意?2 ネットについて2.1 あなたが離脱するのもあなたの自由2.2 その誹謗中傷、ロボットではないですか?2.3 不戦勝!? 根拠なき言いたいこと 「こんな記事 …

no image

Windows10起動時にSkypeをデスクトップに起動させたい!

先に方法を書きます。(Windows10Pro、1803、1809) 【方法】 「ファイル名を指定して実行」(ウィンドウズキー+Rキーを押すと表示される)↓shell:appsfolder↓Skype …

no image

Excelで文字入力を間違えて、左矢印を押したら、左のセルに移動してしまう。

目次1 F2を押して編集モードで入力する2 Googleで検索してみる2.1 ここの表示が「編集」だと左矢印を押してもセルが移動しない F2を押して編集モードで入力する セルが移動してしまうというちょ …

no image

Rubyのチェーンメソッドの注意点

その時(書いているとき)はいいけど、数日後に一気に可読性が落ちる。(それは素人の私だけ?) できるだけ変数にタグ付けしながら書いたほうが後々いい。修正するときとかも一か所修正するだけでいいのがほとんど …