Self-Curation

新卒社会人で営業マンになりました

プログラミング初心者だけどRubyでメタ検索サイトを作ろうとしてる話②'

f:id:scuration:20200326233136j:plain

おはようございます。

社会人になって最初の週末です。

学生時代はかなりアルバイトしていた方だと思うのですが、連勤はしないようにシフト組んでいたのでまだ新生活に慣れていない状況です。

今回は先日から書いてる「RailsでWEBクローリングする話」の経過報告と課題の洗い出しをします。

プログラミング初心者だけどRubyでメタ検索サイトを作ろうとしてる話② - コロンブスの卵

ここまでの経過

これまえやってきたことは以下の通りです。

① RubyでWEBクローリングプログラムの作成→ターミナルで動作
② Railsの導入、Railsアプリの新規作成、Model・View・Controller・Routingの理解
③ open-uri、nekogiriの使い方を理解
④ form_tagの使い方を理解
⑤ ①~④を総合してフォームに入力した単語で検索サイトの検索結果をWEBクローリングできるプログラムを作成

追記:URIに日本語を含められるようにするURI.encodeメソッド

対象WEBページのHTMLを読み込んでくれるopen-uriメソッドについては前回(②)の記事で触れました。

しかしopen-uriはそのままでは日本語に対応しておりません。

多くのサイトでは検索フォームに入力したキーワードをURLに渡すと思いますが、URLに日本語が含まれると以下のようなエラーが出てプログラムは機能しなくなります。

URI::InvalidURIError in SearchesController#search
URI must be ascii only "https://…"

そこで、

url = 'https://~XXX' + search

の次の行に新しく記述を加えて以下のようにしてください。

url = 'https://…' + search
url = URI.encode(url) #追加の記述

searchで受け取ったキーワードが日本語でもURIをアルファベット&数字の文字列に変換してくれるので正常に開けるようになります。

先日作ったプログラムを実際に動かした

正直、文章だけでは伝わりづらい部分もあるので実際にどのようなプログラムなのかスクリーンショット付きで説明します。

今回は何となくですが、あのサラリーマンには馴染み深いビジネス誌「週刊ダイヤモ〇ド」を発刊しているダイヤモ〇ドオンラインさんでやってみます。

①検索したときのURIで固定部分を把握

適当に検索結果を出してくれそうなキーワード、今回は「コロナウィルス」でネット版ダイヤモンドを検索。

するとブラウザのアドレス欄は以下のようになっているはずです。

ttps://diamond.jp/search?fulltext=コロナウィルス

このコロナウィルスという検索キーワードを除いた部分が検索URIの固定部分です。

②プログラムに固定URIを指定

url = 'https://~~/search?fulltext=' + search

ダイヤモンドさんのドメインは省略しております。

③xpassを指定。

Chromeでは右クリック>検証を開きます。

表示させたいコンテンツ部分のIDをコピーします。

f:id:scuration:20200405005606p:plain

doc.xpath('//*[@id="main-column"]').each do |node|

このようにID部分を書き換え。

④ターミナルを起動。

cd C:\…\example

と作ったアプリのアプリのディレクトリに移動
その後

rails s

でRailsServerを起動。

⑤”http://localhost:3000/”をブラウザで開いてこのような画面が出れば1stステップはクリア

f:id:scuration:20200405004514p:plain

⑥”http://localhost:3000/example”を開くと画像のように検索フォームの設置されたトップページが表示される。

f:id:scuration:20200405004809p:plain

⑥試しに"コロナウィルス"と検索すると以下のように指定したxPass部分が表示されるはず。

f:id:scuration:20200405010154p:plain

今後の課題

ここまでの課題は以下のようなものがあります。今後検討していきたい次第です。

WEBクローリング処理後のテキストに変な文字列がいっぱい入る

上の画像見ていただいたら分かる通り、特に”\n”という文字列が入りまくってます。

実践的に使用するにはさらにこれらを取り除くようなプログラムを書く必要があります。

大手検索エンジンではほぼ使えない

GoogleやBingなど大手検索サイトで実験してみるとエラーを返されます。

少なくともこれら2サイトでは検索結果に対してのWEBクローリング使用を制限しており、あちら側から用意されたAPIを使う必要があると思われます。

xPassのID指定が必要

サンプルプログラムではxPassで抽出したい箇所をIDで指定しなければなりません。

右クリック>検証でIDの出ない箇所を指定することができず、サイトのHTML、CSS構成によっては綺麗に必要部分を抽出できない課題があります。

複数のサイトを横断検索できない

今のところ指定できるURIが1つだけなので、当初目的としてたメタ検索サイトの完成までは遠いです。

また異なるレイアウトで作成された複数のサイトを横断して、それを最適な並びに置き換えるのに何かしらのアルゴリズムを用意しなければなりません。


というわけでした。今後はこれらの課題を少しでも克服できたら記事にしていきます。

最後まで読んでいただきありがとうございました。