質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

2013閲覧

[Ruby初心者]Nokogiri(gem)の使い方

anvinon

総合スコア38

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

2グッド

0クリップ

投稿2017/09/28 00:42

こちらのサイトを見ながら勉強中です。
Nokogiriを使ったRubyスクレイピング [初心者向けチュートリアル]
ここでわからない部分があったので質問させて頂きました。

ruby

1# URLにアクセスするためのライブラリの読み込み 2require 'open-uri' 3# Nokogiriライブラリの読み込み 4require 'nokogiri' 5# スクレイピング先のURL 6url = 'http://www.yahoo.co.jp/' 7charset = nil 8html = open(url) do |f| 9 charset = f.charset # 文字種別を取得 10 f.read # htmlを読み込んで変数htmlに渡す 11end 12# htmlをパース(解析)してオブジェクトを生成 13doc = Nokogiri::HTML.parse(html, nil, charset) 14# タイトルを表示 15p doc.title

このソースの以下の記述がわかりませんでした。

ruby

1html = open(url) do |f| 2 charset = f.charset # 文字種別を取得 3 f.read # htmlを読み込んで変数htmlに渡す 4end

ここでは、何故ブロックを使うのかわかりません。

他にもわからない部分があります。以下のソースの部分です。

ruby

1# htmlをパース(解析)してオブジェクトを生成 2doc = Nokogiri::HTML.parse(html, nil, charset)

Nokogiri::HTML.parse
ここの部分は何をしているのでしょうか?

  • Nokogiriはnokogiriというgemがあるのでそれの呼び出しかと思うのですが、頭文字が大文字なのでクラスでしょうか?
  • ::このコロン2つはどういう意味でしょうか?
  • HTMLは定数だと思いますが、何故ここで定数が出てくるのでしょうか?

質問は以上の4つです。全部でなくてもいいので、どなたかご教示ください。よろしくお願いします。

※改めて4つの質問をまとめます。
0. 何故ブロックを使うのか

  1. Nokogiriという部分はgemの呼び出しだと思われるが、クラスなのかどうか
  2. コロン2つは何を意味するのか
  3. HTMLという定数は、何故ここで出てくるのか

質問は以上です。

Charowan, pepetts1👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

何故ブロックを使うのか

このopenメソッドは、ブロック付きで呼び出した場合に、「ブロックを抜けたらファイルを閉じる」という挙動になっています。もっとも、URLからの取得の場合は、結局データを全部持ってくるだけで「閉じる」という概念もないので、そこまで意味はありません。

Nokogiriという部分はgemの呼び出しだと思われるが、クラスなのかどうか

実際にgemを呼び出しているのはrequire 'nokogiri'のほうで、Nokogiriはそこに含まれるモジュールです。

コロン2つは何を意味するのか

Rubyでは、モジュールやクラスの中に、さらに別のクラスやモジュールを作ることができます。::は、クラスの中にある定数にアクセスするための区切りですが、もちろんモジュールやクラス自体も定数ですので、::でアクセスすることとなります。

HTMLという定数は、何故ここで出てくるのか

もしNokogiriが、単にHTMLというモジュールを作ったとすると、何かと衝突する危険が出てきます。Nokogiri::HTMLとすれば、他のライブラリと干渉する心配もない、という理屈です。


今回の件は、前の質問にも出てきた名前空間にまつわるものですので、そこを理解していってください。

投稿2017/09/28 00:58

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

anvinon

2017/09/28 01:03

ご回答ありがとうございます。 名前空間は、まだしっかりと理解が出来ておりませんでした。勉強してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問