読者です 読者をやめる 読者になる 読者になる

オモンパカリスト

深層学習、計算論的神経科学に興味あります

Nokogiriを使うときにでた503エラー

ことのいきさつ

はてブをよく使う。
後で読もうとかまた読みたい記事にはよくはてブ登録する
ブラウザの拡張機能はてブがとっても楽だから手軽につけられる
でも いざ読み返す時にはてブのページ開くのがダルい
メモリ消費抑えたいしょぼPCの自分にとってブラウザのタブ一つでも節約したい()
スクレイピングしてコマンドからリスト叩きたいな
ということで積読状態の「クローラー開発技法」をとりだした

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open('http://b.hatena.ne.jp/i101330/bookmark'))
p doc
ruby nokogiri-parse.rb
/Users/XXXXX/.rbenv/versions/2.2.2/lib/ruby/2.2.0/open-uri.rb:358:in `open_http': 503 Service Temporarily Unavailable (OpenURI::HTTPError)
        from /Users/XXXXX/.rbenv/versions/2.2.2/lib/ruby/2.2.0/open-uri.rb:736:in `buffer_open'

503エラー!。
OpenURIがページをうまくダウンロードできてない。
(ついでにyahoo.co.jpは出来る)
検索かけたら、User-Agentを偽装するといけるらしい。
ちょっとよくわからないけど今はとりあえず従ってみる。
参考にしました

僕のブラウザはVivaldi(beta版なのでまだオススメしない)
開発者ツールを開いて
Network > (ctrl+Rで更新するといい) > bookmarkページのHeaderをみる
Request HeadersセクションにUser-Agentがあるからコピった

require 'nokogiri'
require 'open-uri'

url = 'http://b.hatena.ne.jp/i101330/bookmark'
opt = {}
opt['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/XXXXXXXXXXXXX Safari/XXXXXX Vivaldi/XXXXXXXXXX'

doc = Nokogiri::HTML(open(url, opt))
p doc

opt(ハッシュテーブル)を第二引数でopenメソッドに渡したらいけた
これで解析したNokogiri::HTML::Documentオブジェクトがズラズラでてくる
ぶっちゃけpryで出力したほうがマシ