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

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

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Ruby

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

Q&A

解決済

1回答

2645閲覧

ruby nokogiri スクレイピング redirection forbidden に関して

TaikiWatakabe

総合スコア7

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Ruby

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

0グッド

0クリップ

投稿2017/09/07 00:51

編集2017/09/07 01:45

###前提・実現したいこと
こんにちは。只今(http://morizyun.github.io/blog/ruby-nokogiri-scraping-tutorial/index.html)をみながらスクレイピングを勉強しています。
###発生している問題・エラーメッセージ
エラーメッセージ
xxxnoMacBook-Pro:scrape xxx$ ruby scrape_yahoo_title.rb
/Users/xxx/.rbenv/versions/2.1.0/lib/ruby/2.1.0/open-uri.rb:223:in `open_loop': redirection forbidden: http://matome.naver.jp/tech -> https://matome.naver.jp/tech (RuntimeError)

scrape/scrape_yahoo.jp.rbには以下の通り記述いたしました。

require 'open-uri'

require 'nokogiri'

url = 'http://www.yahoo.co.jp/'

charset = nil

html = open(url) do |f|
charset = f.charset
f.read

end

doc = Nokogiri::HTML.parse(html, nil, charset)

p doc.title

scrape/gemfileには以下の通り記術しました。

frozen_string_literal: true

source "https://rubygems.org"

gem 'open_uri_redirections'

gem "rails"

またscrapeにはgemfile.lockというファイルが存在します。

###試したこと
上記のエラーメッセージが発生するので、https://github.com/open-uri-redirections/open_uri_redirectionsのgemを試して見ました。

上記gemの使い方は、間違っていませんでしょうか。
自分で調べた限りでは以下をどこかに記載しないといけないと思うのですが、全くわかりません。
:allow_redirections => :all

###補足情報(言語/FW/ツール等のバージョンなど)
全くの初心者でこう言ったことをするのが間違っているのかもしれません。一度取り掛かった以上完成させたいのですが、どなたかご教授いただけませんでしょうか。よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

「試したこと」に記載されているgemは必要ないかと。
基本、open-uriとnokogiriだけでいけます!

p doc.title

の代わりに

p doc.xpath('//セレクタ').inner_text

を使ってみては?

今回の場合、titleタグなのでこれ↓でできるかと。
試してみてください。

また自分もそこまで詳しくは無いですが、
プラスで疑問などあれば

p doc.xpath('//title').inner_text

投稿2017/09/07 03:32

keniroya

総合スコア104

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

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

TaikiWatakabe

2017/09/07 03:55

早速のご回答ありがとうございます。 ご教授いただいた通り、試して見ました。 これだけでは、成功しませんでしたが、少し手を加えて成功しました。 require 'open-uri' # URLにアクセスするためのライブラリの読み込み require 'open_uri_redirections' # Nokogiriライブラリの読み込み require 'nokogiri' # スクレイピング先のURL url = 'http://www.yahoo.co.jp/' charset = nil html = open(url, :allow_redirections => :all) do |f| charset = f.charset # 文字種別を取得 f.read # htmlを読み込んで変数htmlに渡す end # htmlをパース(解析)してオブジェクトを生成 doc = Nokogiri::HTML.parse(html, nil, charset) # タイトルを表示 p doc.xpath('//title').inner_text 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問