質問: URI.encode("https://www.google.co.jp/search?q=#{keyword}") #巡回対象サイトのURLを指定・1階層下にいって探索 Anemone.crawl(word, :delay => 3,:depth_limit => 2) do |anemone| #すべてのページに対しての処理 anemone.on_every_page do |page| page.doc.xpath("a","//h2","//h3","//h4","//h5","//h6").each do |title| puts "----------------" puts title.text end end end ``` ### お願い プログラミングを独学で始めて5日目なので、かなり未熟です。 わからない部分は調べますが、できるだけわかりやすくご回答していただけると助かります。 それではよろしくお願いいたします。
回答: 原因は、anemoneというgemがUTF-8という文字コード以外を全く考慮していないからです。 anemoneが内部で使用しているNokogiriはUTF以外からのエンコーディングにも対応しているので以下のように書き換えてあげてみてください。 ``` anemone.on_every_page do |page| encoded_page = Nokogiri::HTML.parse(page.body.encode("utf-8","shift_jis")) encoded_page.xpath("a","//h2","//h3","//h4","//h5","//h6").each do |title| puts "----------------" puts title.text end ... end ``` ちなみに、Google検索結果へのクローリングですが、基本的にGoogleからは非推奨とされています。 なので何回も同じWifiなどから行っているとクローリングできないようになりますのでご注意ください。 担当媒体の検索順位を自動的に取得できるツールなどは、SEOの会社などが自作していたり、購入できたりするのですが、あれもどのIPから検索しているのかを、偽装するようにして実現できているという感じです。 仮に質問者様がどうしても検索順位の10位を取得する機能を作りたい場合は、以下のような感じになるかと思います! 1. プロキシサーバ(踏み台にするサーバ)を介して上記のrubyを実行 2. 仮にGoogleから弾かれたら他のIPを設定する(このIPはネットでプロキシサーバ フリーなどで調べれば出てくるのでそのサイトを再度スクレイピングしてIPを見つけるみたいな感じです) 3. 再度実行. 1に戻る ちなみにanemoneがプロキシサーバのIPをセットできるかはわかりません。 rubyで同じようなことが出来る`Mechanize`というgemは可能でした。 頑張ってください!