/var/www/yatta47.log

やったのログ置場です。スクラップみたいな短編が多いかと。

selenium + phantomjsで検索すると検索結果が出ない時の対処

URLエンコードでハマったので備忘録。

やりたかったのはseleniumとphantomjsを使ってGoogle検索して、検索結果のURLだけリスト表示したいなというのが事の発端。その時に検索した日本語が検索結果(というかタイトル)としてうまく出なくて、調べて解決。

????で表示される

ハマった内容というのは、検索結果が以下のように????(クエスチョンマーク)で表示されるというもの。

$ ruby main.rb 
????? - Google 検索

おそらく、phantomjsを使っているので、そこで言語設定とかをちゃんとしてあげれば出来るのかなーと思いつつ、そもそも検索結果が出てきていないので、Googleさんはちゃんと日本語でうった検索ワードを認識していないのではないかと・・・・

URLをエンコードする

ってことで、日本語部分をエンコードして、検索に渡してあげることにしました。エンコードは標準ライブラリのURIでやってます。

バージョンはこちら。

$ ruby -v
ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux]

エンコードのテストコードはこちら。

# encoding : utf-8
require 'uri'

keyword = "ラブライブ"
url = 'https://www.google.co.jp/search?q=' + keyword

# 何もしない
p url

#
p URI.escape(url)

実行するとこんな感じ。

$ ruby encode_test.rb 
"https://www.google.co.jp/search?q=ラブライブ"
"https://www.google.co.jp/search?q=%E3%83%A9%E3%83%96%E3%83%A9%E3%82%A4%E3%83%96"

ちゃんと日本語の検索ワードがエンコードされてますね。

ちなみにURI.unescapeでデコードされます。

これで解決

エンコードしてseleniumに渡したらちゃんと日本語も検索できて、そして検索結果も出てきました。

こう考えると、ブラウザのアドレスバーってのは色々とやってくれてるんだな〜というのを実感。Googleのフォームにキーワードを入れて検索すると、URLにエンコードされたワードが入ってるんですね。アドレスバーに直接日本語を打っても検索されるし。何を基準に判断してるんだろう。

なにわともあれこれで一歩進みそうです。

参考にしたサイトはこちら。

RubyでURLのエンコード、デコードをする| URI - むかぁ~ どっと こむ

ちなみに検索ワードとしてつかった「ラブライブ」。Mステに出たり紅白に出たりとすごいですね。

これも買わないと。

広告を非表示にする
Real Time Web Analytics