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 3 years have passed since last update.

Ruby(Open-URI)とNokogiriでスクレイピングした際に出会ったエラー対応(404エラーのハンドリング)

Posted at

はじめに

Ruby(Rails)でWebスクレイピングをしたとき

URLが404 Not Foundになり指定したURLのリソースが見つからず、以下のエラーを出力して止まってしまって困りました。

OpenURI::HTTPError

今回はこのエラーハンドリングの話をします。

ちなみに、Webスクレイピングで用いたライブラリやGemは、OpenURINokogiriです。

用語の説明

OpenURI

  • httpやftpを通じてネットワーク上のリソースを取得することができます。こちらはRuby標準のライブラリです
  • こちらだけでもスクレイピングは行えます

Nokogiri

  • こちらも、Webスクレイピングをサポートしてくれるやつです。こちらは、HTMLの情報を全て取得したい場合に楽に扱えます
  • 特定のDOMを取得する際の 僕はよく使うsearch など、スクレイピングをする上でひつようなメソッドがたくさんあるので、よく用いています

現象

ざっくり、以下のようなコード書いていたら

require 'open-uri'
require 'nokogiri'

url = 'https://www.test.jp/'

# open-uriでurlにアクセスしてhtmlを取得し、Nokogiriでパースする
doc = Nokogiri::HTML(open(url), nil, 'utf-8')

特定のページで404が発生し、エラーが発生し、それ以上スクレイピングできなくなりました。

対策

困るので、エラーハンドリングしつつ、スクレイピングを続けられるようにしましょう。

require 'open-uri'
require 'nokogiri'

url = 'https://www.test.jp/'

begin
  # open-uriでurlにアクセスしてhtmlを取得し、Nokogiriでパースする
  doc = Nokogiri::HTML(open(url), nil, 'utf-8')
rescue OpenURI::HTTPError => e
  # 例外処理
end

これでハンドリングできました。

さいごに

当たり前ですが、このスクリプトを間髪を入れずに連続して実行すると対象となるサーバへ連続的にアクセスが行われてしまうので絶対にしないようにしてください。

本日は、以上です。

アウトプット100本ノック実施中

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?