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

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

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

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

Q&A

解決済

1回答

1314閲覧

RubyのOpen-uriにてYodobashiサイトからのオープンが出来ない。

Bunga777

総合スコア5

Ruby

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

0グッド

0クリップ

投稿2020/03/19 00:39

編集2020/03/19 07:48

前提・実現したいこと

簡単な価格調査のスクレイピングをしています。
Yodobashiのサイトからホームページの情報が読み取れなく困っています。
(以前は普通にできていたと思うのですが)

何が悪いのかわからないので、超簡単なプログラムを作成してみたところ
やはりYodobashiだけ反応が無いので、原因など分かれば教えていただきたい。

ちなみに、Amazonや楽天では普通に表示できます。

実行環境

Windows10 ,VirtualBox ,Vagran ,Centos6.5

Rubyでやってます。

該当のソースコード

Ruby

1require 'open-uri' 2 3ua = "Mozilla/5.0" 4io = open('https://www.yodobashi.com','User-Agent' => ua) 5 6puts io.read

現状の症状

プログラムを実行するとず~っとどこかのループに入っているのか、ダンマリ状態(T_T)

試したこと

User-Agentを足してみたり、あとRefereを入れてみたりしましたが変わらず。

他の言語ならいけるの??

もともとRubyでシステムを組んでいた為にRubyで確認していますが、
他の言語、Pythonとかなら普通にいけるのか?
もしかして他のライブラリ使うといけるとかの情報でもOKなので、情報あったらうれしい。

追記

net/http で行けるんじゃね?という件が出たのでWebにあった適当なコードを拝借してやってみましたが、どうやら同じくレスポンスがなくダメっぽいです。 

どこか致命的におかしなところあったら教えて下さい。

ruby

1 # 必要な機能の呼び出し 2 require 'net/http' 3 require 'uri' 4 5 # 対象のURLの指定 6 uri = URI.parse("https://www.yodobashi.com/") 7 # GETオブジェクトの作成 8 request = Net::HTTP::Get.new(uri) 9 # リクエスト情報の追加 10 request["Connection"] = "keep-alive" 11 request["Upgrade-Insecure-Requests"] = "1" 12 request["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.63 Safari/537.36" 13 request["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" 14 request["Referer"] = "https://www.yodobashi.com/" 15 request["Accept-Language"] = "ja,en-US;q=0.9,en;q=0.8" 16 request["Cookie"] = "" 17 18 req_options = { 19 use_ssl: uri.scheme == "https", 20 } 21 22 # リクエストを送る 23 response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http| 24 http.request(request) 25 end 26 27 # 画面出力 28 p response.body 29 30 # 適当なファイルへ挿入 31 File.open("./net_http.html", "w") do |f| 32 f.write(response.body) 33 end

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

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

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

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

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

guest

回答1

0

ベストアンサー

とりあえず原因としてはyodobashi側がSSLv3までを弾いているようです。

  • keep-aliveでないとダメ
  • accept-languageを送信しないとダメ

bot弾きのようなので詳細は出しませんがopen-uriでは難しく、net/httpを使うことになりました。

投稿2020/03/19 01:30

編集2020/03/19 02:15
asm

総合スコア15147

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

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

Bunga777

2020/03/19 03:11

回答ありがとうございます!! net/http ですか。少し調べてやってみます。 bot対策はどこも色々やっているようで、なかなかセンシティブな内容ですよね。
Bunga777

2020/03/19 07:49

ネットにあったコードを拝借して net/http でもやってみましたが、うまくいきません。 (質問欄の追記にコード入れました) どこか致命的な部分ってありますかね??
asm

2020/03/19 09:44

UAが古すぎるようですね。
Bunga777

2020/03/19 11:53

ありがとうございます。 UAを直近のEdgeのものに変更したら行けました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問