1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【初心者向け】MechanizeでJavaScriptの箇所を読み取れない

Posted at

###■環境
・Windows10(64bit)
・Ruby 2.7.4
・Rails 5.2.6
・Mechanize 2.8.2
###■MechanizeでJavaScriptの箇所を読み取れない
####状況
Railsアプリケーションでgem「Mechanize」を使用し、Webスクレイピングを行っている。
しかし、HTMLファイル内のJavaScriptの箇所だけ読み取れない(パースできない)。
####原因
MechanizeはJavaScript未対応
####対処1
MechanizeではなくSeleniumなどを使用

####対処2
JavaScriptが行うはずの処理をRubyで置き換える。
ただし、そのためにはJavaScriptの内容を読み解く能力が必要。

####対処3
HTMLファイル内のscriptタグを削除し、読み取り可能になるか試す。

# Mechanizeの初期設定を実行。Mechanizeクラスのオブジェクトを作成。
agent = Mechanize.new
# 保持する履歴の最大数を指定。「0」だとリファラー周りで不都合があるが、大きいとメモリ容量を取るため、「2」辺りが妥当。
agent.max_history = 2
# HTTPリクエストのヘッダーにUser-Agentを設定。指定文言以外だとMechanizeの情報が送信されてしまうため注意。
agent.user_agent_alias = 'Windows Mozilla'
# キャッシュに存在するページへの再アクセス時に更新チェックを行うかどうかを設定。true:変更が無ければキャッシュを再利用。
agent.conditional_requests = false

# URLを取得
top_url = 'https://sample.co.jp/'
# MechanizeにてURLからHTMLファイルを取得し、パースを阻害するJavascript関連のタグを削除。
html = agent.get(top_url).body.gsub!(/<script.*?>/, "").gsub!(/<\/script>/, "")
# 以降で必要なパースなどを行う

・Mechanizeのgetメソッド: URLが表すページを取得する
・Mechanizeのbodyメソッド: ページのBody部を返す
・gsubメソッド: 文字列を置換する。標準では非破壊的メソッドのため、今回は「!」を付け破壊的メソッドにしている。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?