MAGAZINE

ルーターマガジン

クローリング/スクレイピング

BingAPIを用いた検索エンジン自動化(クローリング)手法!

2019.12.27
Pocket

こんにちは!アルバイトのHiokiです.

みなさんスクレイピングをする上で検索エンジンを自動操作したくなることはありませんか?今回はそんなみなさんにBing APIの使い方(Ruby)を紹介します.

目次

  • 価格
  • APIキーの取得方法
  • サンプルプログラム
  • 検索オプション
  • Google検索との比較
  • おわりに

価格

1000 トランザクション/ 月 までは無料、それ以降はオプションによってさまざな価格設定がされています

https://azure.microsoft.com/ja-jp/pricing/details/cognitive-services/search-api/

APIキーの取得方法

  1. まずはMicrosoftアカウント(Azureのアカウントとして利用)の作成を行います https://azure.microsoft.com/ja-jp/free/
  2. アカウントが作成できたらAzureポータル( https://portal.azure.com/#home )でサービスの一覧から "cognitive services"をクリックします.見つからなければページ最上部の検索窓で検索してみてください
  3. 次に marketplace ページで "Bing Serach v7" を探してクリックします

  4. "Bing Serach v7" ページにたどり着けたら「作成」をクリックします

  5. 作成画面に遷移するので,ここで名前やプランの設定をして "Create"を押します ※無料で試してみたい場合はここで  pricing tierを"F1(3 Calls per second, 1k Calls per month)"としてくてださい!でないとすぐ課金対象になってしまいます.(恐らくAzureアカウント新規作成時に付与されるクレジットが優先的に消費されると思いますが,ご自身で確認お願いいたします)

  6. 「デプロイが進行中です」となるので完了するまで待ちます.完了したら「リソースに移動」をクリックします.

  7. ここに表示される Key1 があなたのAPIキーです.プログラムにはこのキーをコピペして使ってください!

サンプルプログラム

ここではサンプルプログラムとして"Hello,world"を検索するスクリプトをかいてみます.

といってもほぼサンプル通りです.以下の公式ドキュメントでPythonやGoなど他の言語でのサンプルプログラムも記載されているのでぜひ参考にしください

https://docs.microsoft.com/ja-jp/azure/cognitive-services/bing-web-search/quickstarts/ruby

require 'net/http'
require 'uri'
require 'json'

accessKey = "Your Accesskey"
uri  = "https://api.cognitive.microsoft.com"
path = "/bing/v7.0/search"
term = "Hello,world"
# Validate the subscription key.
if accessKey.length != 32 then
    puts "Invalid Bing Search API subscription key!"
    puts "Please paste yours into the source code."
    abort
end
# Construct the endpoint uri.
uri = URI(uri + path + "?q=" + URI.escape(term))
# Create the request.
request = Net::HTTP::Get.new(uri)
request['Ocp-Apim-Subscription-Key'] = accessKey
# Get the response.
response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
  http.request(request)
end
obj = JSON(response.body)
puts obj

アクセスキーをコードに直接書くのが嫌だという方は作業フォルダの外にローカルにファイルとして保持してもよいと思います

accessKey = File.open("#{Dir.home}/.bingaccesskey").read.chomp

その他のリクエストパラメーター

上記サンプルプログラムで使用した "?q="以外にも以下のクエリパラメータが使えるようです!

https://dev.cognitive.microsoft.com/docs/services/f40197291cd14401b93a478716e818bf/operations/56b4447dcf5ff8098cef380d

Google検索との比較

さて,ここまで Bing API を紹介してきましたが,気になるのは検索エンジンとしての性能ですよね? そこで検索エンジンのドンである Google と比較してみました.

まずは検索キーワード・オプションの数をみてみました

Bing

Google

公式のhelpページに一覧はありませんがこのBlogによると少なくとも42は検索キーワード・オプションがあるみたいです.

https://ahrefs.com/blog/google-advanced-search-operators/#find-odd-files

したがって,選択肢の多さではGoogleに軍配があがりました.それだけGoogleの方が柔軟な検索ができそうですが,主要な検索キーワード・オプション(完全一致,除外,AND, NOT, OR,入力した語句を全て含む 検索)はBingにも用意されており,検索結果の正確さにも大きな差はないように思えます.

しかし,明らかにGoogleより検索精度が劣る場合も確認されました.例えばサイト内検索の検索オプションとOR検索演算子を組み合わせた site:https://xxx.jp/ hogehoge OR hugahuga のような場合

Googleでは指定したサイトでどちらかの単語を含むページが上位に来ますがBingでは,ORでない場合には指定したサイトでその単語を含むものを上位に出してくれるですが,ORにした途端,指定したサイト以外のものを上位に表示してくるという現象が起きました.

このようにBing検索の精度がGoogle検索で期待していたものとズレがある場合はプログラムで調整するのが良いと思います.

今回の例では,ORを使わない場合の精度はGoogleと遜色がないことはわかっています.なので,単語検索を2回にわけ,その検索結果をプログラム上で足し合わせて計算処理をすればOR検索を擬似的に行うことができます.

終わりに

最後までお読みいただきありがとうございます!いかがだったでしょうか?

利用するまでの過程で一番めんどくさいのはMicrosoftアカウントを作る部分なので,もしすでにアカウントを持ってる方は5分もかからずAPIキーの取得ができるのではないでしょうか?今回の記事でみなさんの自動化ライフがさらに充実したものになればと思います!では!

Pocket

CONTACT

お問い合わせ・ご依頼はこちらから