Ruby を使用して Web から情報を抽出する

Web スクレイピング・ソフトウェアと Web サイトの API を利用してデータを自動抽出する

この記事では、構造化された情報を Web から抽出するための最新の方法について探っていきます。著者である M. Tim Jones が Ruby スクリプトの例を使用して、スクレイピング技術について説明するとともに、目的のデータを取得するために Web API を使用する方法について説明します。

M. Tim Jones, Independent author

M. TIm JonesM. Tim Jones は組み込みソフトウェアのエンジニアであり、『Artificial Intelligence: A Systems Approach』、『GNU/Linux Application Programming』や『AI Application Programming』、それに『BSD Sockets Programming from a Multilanguage Perspective』などの著者でもあります。技術的な経歴は静止軌道衛星用のカーネル開発から、組み込みシステム・アーキテクチャーやネットワーク・プロトコル開発まで、広範にわたっています。彼はコロラド州ロングモン在住で、Intel に勤務するプラットフォーム・アーキテクトです。



2014年 1月 23日

今や Web サイトの対象は人間の読者のみではありません。多くのサイトは現在、コンピューター・プログラムで情報を取得するための API をサポートしています。HTML ページを構文解析して理解しやすい形式にする方法として、スクリーン・スクレイピングは従来から使用されており、現在でもなお便利な方法です。その一方で、API を使用して単純な方法で Web データの抽出を行う機会が急速に増えています。ProgrammableWeb によれば、この記事を執筆していた時点で API を提供している Web サイトの数は 1 万を超えており、それ以前の 15 ヶ月間で 3000 件超増加していることになります。(ProgrammableWeb 自体も、API、マッシュアップ、メンバー・プロフィール、その他のデータをカタログの中から検索、取得するための API を提供しています。)

この記事では、現在の Web スクレイピングについて説明した後、API を使用する方法と Web スクレイピングによる方法を比較します。さらに、よく利用される Web プロパティーから構造化された情報を抽出する方法として、API を使用する方法を Ruby の例を示しながら説明します。この記事を読むための前提として、Ruby 言語、REST (Representational State Transfer)、JSON (JavaScript Object Notation) や XML などのデータ・フォーマットについての基本を理解している必要があります。

スクレイピングによる方法と API による方法の比較

現時点では、いくつかのスクレイピング・ソリューションを利用できます。そのなかには、HTML を別のフォーマット (JSON など) に変換することで、目的とするコンテンツの抽出を容易に行えるようにするソリューションや、HTML を読み込んで、目的のデータがマークアップされている HTML 階層構造の関数としてコンテンツを定義できるソリューションがあります。そうしたソリューションの 1 つとして、Ruby 言語を使用して HTML 文書や XML 文書の構文解析をサポートする Nokogiri があります。他にも、オープンソースのスクレイピング・ツールには、JavaScript を使用する pjscrape や、Python を使用する Beautiful Soup などがあります。pjscrape に実装されているコマンドライン・ツールを使用すると、JavaScript によるコンテンツを含めて完全にレンダリングされたページをスクレイピングすることができます。Beautiful Soup は Python 2 環境や Python 3 環境にすっきりと統合することができます。

ここで、Nokogiri を使用してスクレイピングすることにより、CrunchBase でレポートされている IBM の従業員数を明らかにしたいとします。最初のステップは、IBM の従業員数が記載されている CrunchBase の特定の HTML ページのマークアップを理解することです。図 1 は Mozilla Firefox の Firebug ツールでそのページを開いたところです。この画像の上半分はレンダリングされた HTML ページを示しており、下半分は対象となる部分の HTML ソース・コードです。

図 1. Firefox の Firebug で HTML ソースを表示する
Firefox の Firebug で HTML ソースを表示した状態のスクリーン・キャプチャー

リスト 1 の Ruby スクリプトは、Nokogiri を使用して図 1 の Web ページから従業員数をスクレイピングするスクリプトです。

リスト 1. Nokogiri を使用して HTML を構文解析する (parse.rb)
#!/usr/bin/env ruby
require 'rubygems'
require 'nokogiri'
require 'open-uri'

# Define the URL with the argument passed by the user
uri = "http://www.crunchbase.com/company/#{ARGV[0]}"

# Use Nokogiri to get the document
doc = Nokogiri::HTML(open(uri))

# Find the link of interest
link = doc.search('tr span[1]')

# Emit the content associated with that link
puts link[0].content

Firebug で表示した図 1 の HTML ソースを見ると、一意の ID を持つ HTML <span> タグの中に対象のデータ (従業員数) が埋め込まれていることがわかります。また <span id="num_employees"> タグは、ID が指定された 2 つの <span> タグのうち、最初に記述されている方であることがわかります。そのため、リスト 1 の最後の 2 つの命令では、最初の <span> タグを link = doc.search('tr span[1]') でリクエストし、構文解析されて link に格納された内容を puts link[0].content で出力しています。

CrunchBase は REST API も公開しており、この API を利用すると、スクレイピングでアクセスできるデータよりもかなり多くのデータにアクセスすることができます。リスト 2 は、この API を使用して CrunchBase のサイトから企業の従業員数を抽出する方法を示しています。

リスト 2. CrunchBase の REST API と JSON の構文解析を使用する (api.rb)
#!/usr/bin/env ruby
require 'rubygems'
require 'json'
require 'net/http'

# Define the URL with the argument passed by the user
uri = "http://api.crunchbase.com/v/1/company/#{ARGV[0]}.js"

# Perform the HTTP GET request, and return the response
resp = Net::HTTP.get_response(URI.parse(uri))

# Parse the JSON from the response body
jresp = JSON.parse(resp.body)

# Emit the content of interest
puts jresp['number_of_employees']

リスト 2 では (スクリプトの引数として渡された企業名を使用して) URL を定義しています。次に HTTP クラスを使用して GET リクエストを送信すると、レスポンスが返されます。このレスポンスは JSON オブジェクトとして構文解析され、対象とするアイテムは Ruby のデータ構造を利用して参照されます。

リスト 3 のコンソール・セッションでは、リスト 1 のスクレイピング・スクリプトを実行した場合とリスト 2 の API ベースのスクリプトを実行した場合の両方の結果を示しています。

リスト 3. スクレイピングによる方法と API による方法のデモンストレーション結果
$ ./parse.rb ibm
388,000
$ ./api.rb ibm
388000
$ ./parse.rb cisco
63,000
$ ./api.rb cisco
63000
$ ./parse.rb paypal
300,000
$ ./api.rb paypal
300000
$

スクレイピング・スクリプトを実行するとフォーマット設定されたカウントが出力されますが、API スクリプトを実行すると整数がそのまま出力されます。リスト 3 を見るとわかるように、どちらのスクリプトを使用した方法も一般化することができ、CrunchBase で追跡されている他の企業の従業員数をリクエストするために使用することができます。各々の方法で指定されている URL の構造が一般的であるため、このように汎用的な使い方が可能になります。

では、API による方法にはどのような利点があるのでしょう?スクレイピングによる方法では、HTML を分析して構造を理解し、抽出するデータを特定しなければなりません。それができていれば、Nokogiri を使用して単純に HTML を構文解析し、対象データを取得することができます。しかし HTML 文書の構造が変更された場合には、新しい構造を適切に構文解析するためにスクリプトを変更する必要があるかもしれません。API による方法には、API が変更されない限り、そうした心配はありません。API による方法には、もう 1 つ重要な利点があります。それは、そのインターフェースで公開されるすべてのデータ (JSON オブジェクトとして返されるデータ) にアクセスできることです。CrunchBase が公開しているデータのうち、人間が読むために HTML で公開しているデータは、かなり少なくなります。

ここからは、他の API を使用してインターネットからさまざまな情報を抽出する方法を探っていきます。ここでもやはり Ruby スクリプトを使用します。まず始めに、ソーシャル・ネットワーキング・サイトから個人情報が含まれるデータを収集する方法を紹介します。続いて、他の API ソースを使用して、個人情報が含まれていないデータを検索する方法についても紹介します。


LinkedIn から個人情報が含まれるデータを抽出する

専門的職業のためのソーシャル・ネットワーキング Web サイトである LinkedIn は、他の開発者とつながったり、仕事を探したり、企業について調べたり、興味深いトピックに関して協力するグループに参加したりする上で便利なサイトです。LinkedIn にはレコメンデーション・エンジンが組み込まれており、ユーザーのプロフィールを基に、フォローするとよい仕事や企業をおすすめする機能があります。

LinkedIn のユーザーは、このサイトの REST API と JavaScript API を利用して、人間が読める Web サイトにも公開されている情報 (つながり、ソーシャル共有ストリーム、コンテンツ・グループ、コミュニケーション (メッセージ、つながりへの招待)、企業や仕事の情報など) を取得することができます。

LinkedIn の API を利用するには、アプリケーションを登録する必要があります。登録すると、API キーとシークレット・キー、そしてユーザー・トークンとユーザー・シークレットが送られてきます。LinkedIn では OAuth プロトコルを使用して認証を行います。

認証されると、アクセス・トークン・オブジェクトを使用して REST リクエストを実行することができます。レスポンスは通常の HTTP レスポンスであるため、レスポンスの本体を構文解析すると JSON オブジェクトが得られます。その JSON オブジェクトに繰り返し処理を行うことで、対象のデータを抽出することができます。

リスト 4 の Ruby スクリプトにより、認証された LinkedIn ユーザーに対し、フォローするとよい企業と、仕事の候補が出力されます。

リスト 4. 候補となり得る企業と仕事を LinkedIn の API を使用して表示する (lkdin.rb)
#!/usr/bin/ruby
require 'rubygems'
require 'oauth'
require 'json'

pquery = "http://api.linkedin.com/v1/people/~?format=json"
cquery='http://api.linkedin.com/v1/people/~/suggestions/to-follow/companies?format=json'
jquery='http://api.linkedin.com/v1/people/~/suggestions/job-suggestions?format=json'
 
# Fill the keys and secrets you retrieved after registering your app
api_key = 'api key'
api_secret = 'api secret'
user_token = 'user token'
user_secret = 'user secret'
 
# Specify LinkedIn API endpoint
configuration = { :site => 'https://api.linkedin.com' }
 
# Use the API key and secret to instantiate consumer object
consumer = OAuth::Consumer.new(api_key, api_secret, configuration)
 
# Use the developer token and secret to instantiate access token object
access_token = OAuth::AccessToken.new(consumer, user_token, user_secret)

# Get the username for this profile
response = access_token.get(pquery)
jresp = JSON.parse(response.body)
myName = "#{jresp['firstName']} #{jresp['lastName']}"
puts "\nSuggested companies to follow for #{myName}"

# Get the suggested companies to follow
response = access_token.get(cquery)
jresp = JSON.parse(response.body)

# Iterate through each and display the company name
jresp['values'].each do | company |
    puts "  #{company['name']}"
end

# Get the job suggestions
response = access_token.get(jquery)
jresp = JSON.parse(response.body)
puts "\nSuggested jobs for #{myName}"

# Iterate through each suggested job and print the company name
jresp['jobs']['values'].each do | job |
    puts "  #{job['company']['name']} in #{job['locationDescription']}"
end

puts "\n"

リスト 5 のコンソール・セッションは、リスト 4 の Ruby スクリプトを実行した場合の出力を示しています。この出力は Ruby スクリプトで LinkedIn の API を 3 回 (認証のために1 回、候補となり得る企業の情報と、候補となり得る仕事の情報へリンクするために各 1 回) 別々に呼び出した結果として得られています。

リスト 5. LinkedIn に対する Ruby スクリプトを実行した場合の出力
$ ./lkdin.rb

Suggested companies to follow for M. Tim Jones
  Open Kernel Labs, Inc.
  Linaro
  Wind River
  DDC-I
  Linsyssoft Technologies
  Kalray
  American Megatrends
  JetHead Development
  Evidence Srl
  Aizyc Technology

Suggested jobs for M. Tim Jones
  Kozio in Greater Denver Area
  Samsung Semiconductor Inc in San Jose, CA
  Terran Systems in Sunnyvale, CA
  Magnum Semiconductor in San Francisco Bay Area
  RGB Spectrum in Alameda, CA
  Aptina in San Francisco Bay Area
  CyberCoders in San Francisco, CA
  CyberCoders in Alameda, CA
  SanDisk in Longmont, CO
  SanDisk in Longmont, CO

$

OAuth をサポートするプログラミング言語であれば、任意の言語で LinkedIn の API を使用することができます。


Yelp の API を使用して商業施設のデータを取得する

Yelp は、評価、レビュー、地理情報 (地域、都市、ジオコード) などの検索をはじめとする、商業施設を検索するための豊富な REST API を公開しています。Yelp API を使用すると、指定されたタイプの商業施設 (例えば、レストランなど) を検索することや、地理的な範囲を指定して (例えば、ある地理座標に近いとか、ある地域、住所、都市などに近いなど) 検索を行うことができます。返される JSON レスポンスには、指定した基準を満たす商業施設に関する大量の情報 (例えば、住所、距離、評価、特別サービス、その他の情報を示すための URL (商業施設の写真、モバイル・フォーマットによる情報、その他) など) が含まれています。

LinkedIn と同様、Yelp も OAuth を使用して認証を行います。そのため、ユーザーは Yelp に登録し、API で認証するための一連のクレデンシャルを入手する必要があります。スクリプトが認証されると、REST ベースの URL リクエストを作成することができます。リスト 6 では、コロラド州ボルダーにあるレストランを検索するリクエストをハード・コーディングしています。レスポンスの本体は構文解析されて JSON オブジェクトにされ、そのオブジェクトに繰り返し処理を行うことで目的とする情報を出力します。なお、この API を呼び出した時点で営業していない商業施設 (レストラン) は除外されるようにしています。

リスト 6. Yelp の API を使用してビジネス・データを取得する (yelp.rb)
#!/usr/bin/ruby
require 'rubygems'
require 'oauth'
require 'json'

consumer_key = 'your consumer key'
consumer_secret = 'your consumer secret'
token = 'your token'
token_secret = 'your token secret'
api_host = 'http://api.yelp.com'

consumer = OAuth::Consumer.new(consumer_key, consumer_secret, {:site => api_host})
access_token = OAuth::AccessToken.new(consumer, token, token_secret)

path = "/v2/search?term=restaurants&location=Boulder,CO"

jresp = JSON.parse(access_token.get(path).body)

jresp['businesses'].each do | business |
    if business['is_closed'] == false
      printf("%-32s  %10s  %3d  %1.1f\n", 
                business['name'], business['phone'], 
                business['review_count'], business['rating'])
    end
end

リスト 7 のコンソール・セッションは、リスト 6 のスクリプトを実行した場合の出力の例を示しています。ここでは簡単のため、この API の制限機能やオフセット機能 (完全なリストを取得するために API を何度も呼び出す機能) は使用せず、単純に API を呼び出して返された商業施設 (レストラン) のリストを示しています。このサンプル出力には、商業施設 (レストラン) の名称、電話番号、レビューの件数、平均評価が表示されています。

リスト 7. Yelp の API を呼び出す Ruby スクリプトを実行した場合の出力
$ ./yelp.rb
Frasca Food and Wine              3034426966  189  4.5
John's Restaurant                 3034445232   51  4.5
Leaf Vegetarian Restaurant        3034421485  144  4.0
Nepal Cuisine                     3035545828   65  4.5
Black Cat Bistro                  3034445500   72  4.0
The Mediterranean Restaurant      3034445335  306  4.0
Arugula Bar E Ristorante          3034435100   48  4.0
Ras Kassa's Ethiopia Restaurant   3034472919  101  4.0
L'Atelier                         3034427233   58  4.0
Bombay Bistro                     3034444721   87  4.0
Brasserie Ten Ten                 3039981010  200  4.0
Flagstaff House                   3034424640   86  4.5
Pearl Street Mall                 3034493774   77  4.0
Gurkhas on the Hill               3034431355   19  4.0
The Kitchen                       3035445973  274  4.0
Chez Thuy Restaurant              3034421700   99  3.5
Il Pastaio                        3034479572  113  4.5
3 Margaritas                      3039981234   11  3.5
Q's Restaurant                    3034424880   65  4.0
Julia's Kitchen                                 8  5.0

$

Yelp の API は、ドキュメントが非常に充実しており、データの説明、サンプル・コード、エラー処理、等々が詳細に記されています。ただし Yelp の API は便利ではあるものの、その使用回数には制限がかけられています。初めて使用する場合、1 日あたりに許容される API の呼び出し回数は 100 回まで、そしてテストを目的とした呼び出しは 1,000 回までとなっています。アプリケーションが Yelp の表示要件を満たす場合には、1 日あたり 10,000 回の呼び出しが許容されます (もっと増える可能性もあります)。


単純なマッシュアップを使用してドメインの地理的情報を取得する

次に紹介するのは、2 つのソースを結び付けて情報を生成する例です。ここでは、Web のドメイン名を一般的な地理的情報に変換します。リスト 8 の Ruby スクリプトは Linux の host コマンドと OpenCrypt IP Location API Service を使用して地理的情報を取得します。

リスト 8. Web ドメインの地理的情報を取得する
#!/usr/bin/env ruby
require 'net/http'

aggr = ""
key = 'your api key here'

# Get the IP address for the domain using the 'host' command
IO.popen("host #{ARGV[0]}") { | line |
  until line.eof?
    aggr += line.gets
  end
}

# Find the IP address in the response from the 'host' command
pattern = /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/
if m = pattern.match(aggr)
    uri = "http://api.opencrypt.com/ip/?IP=#{m[0]}&key=#{key}"
    resp = Net::HTTP.get_response(URI.parse(uri))
    puts resp.body
end

リスト 8 ではまず、ローカルで host コマンドを使用してドメイン名を IP アドレスに変換します (host コマンド自体は、内部 API を使用して、DNS リゾルバーによってドメイン名を解決して IP アドレスに変換します)。単純な正規表現 (そして match メソッド) を使用して、host コマンドで出力される IP アドレスを構文解析します。IP アドレスを得られたら、OpenCrypt の IP ロケーション・サービスを利用して一般的なジオロケーション情報を取得します。OpenCrypt の API は、最大 50,000 回まで無料で呼び出すことができます。

OpenCrypt の API の呼び出しは単純で、作成する URL の中に、場所特定の対象となる IP アドレスと、OpenCrypt に登録する際に得られたキーを含めるようにします。HTTP レスポンスの本体は、IP アドレス、国コード、国名で構成されます。

リスト 9 のコンソール・セッションは、2 つのサンプル・ドメイン名に対する出力を示しています。

リスト 9. ドメインの地理的情報を取得するための単純なスクリプトを使用する
$ ./where.rb www.baynet.ne.jp
IP=111.68.239.125
CC=JP
CN=Japan
$ ./where.rb www.pravda.ru
IP=212.76.137.2
CC=RU
CN=Russian Federation
$

Google の API を使用して検索する

誰もが認める Web API のチャンピオンは Google です。Google には非常に多くの API があることから、Google では API を検索するための API まで提供しています。Google APIs Discovery Service を利用すると、Google が提供する API の一覧を取得することができ、それらの API に関するメタデータも抽出することができます。大部分の Google API は、使用する際に認証が必要ですが、API 検索用の API はセキュアなソケット接続で利用することができます。そのため、リスト 10 は Ruby の https クラスを使用してセキュア・ポートへの接続を作成しています。定義されている URL は、REST リクエストを指定しており、レスポンスは JSON でエンコードされます。このレスポンスに繰り返し処理を行い、目的とする API に関するデータのごく一部を出力しています。

リスト 10. Google APIs Discovery Service を利用して Google API の一覧を作成する (gdir.rb)
#!/usr/bin/ruby
require 'rubygems'
require 'net/https'
require 'json'

url = 'https://www.googleapis.com/discovery/v1/apis'

uri = URI.parse(url)

# Set up a connection to the Google API Service
http = Net::HTTP.new( uri.host, 443 )
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

# Connect to the service
req = Net::HTTP::Get.new(uri.request_uri)
resp = http.request(req)

# Get the JSON representation
jresp = JSON.parse(resp.body)

# Iterate through the API List
jresp['items'].each do | item |
  if item['preferred'] == true
    name = item['name']
    title = item['title']
    link = item['discoveryLink']
    printf("%-17s %-34s %-20s\n", name, title, link)
  end
end

リスト 11 のコンソール・セッションは、リスト 10 のスクリプトを実行した場合のレスポンスの例を示しています。

リスト 11. Google のディレクトリー・サービスを利用するための単純な Ruby スクリプトを使用する
$ ./gdir.rb
adexchangebuyer   Ad Exchange Buyer API              ./apis/adexchangebuyer/v1.1/rest
adsense           AdSense Management API             ./apis/adsense/v1.1/rest
adsensehost       AdSense Host API                   ./apis/adsensehost/v4.1/rest
analytics         Google Analytics API               ./apis/analytics/v3/rest
androidpublisher  Google Play Android Developer API  ./apis/androidpublisher/v1/rest
audit             Enterprise Audit API               ./apis/audit/v1/rest
bigquery          BigQuery API                       ./apis/bigquery/v2/rest
blogger           Blogger API                        ./apis/blogger/v3/rest
books             Books API                          ./apis/books/v1/rest
calendar          Calendar API                       ./apis/calendar/v3/rest
compute           Compute Engine API                 ./apis/compute/v1beta12/rest
coordinate        Google Maps Coordinate API         ./apis/coordinate/v1/rest
customsearch      CustomSearch API                   ./apis/customsearch/v1/rest
dfareporting      DFA Reporting API                  ./apis/dfareporting/v1/rest
discovery         APIs Discovery Service             ./apis/discovery/v1/rest
drive             Drive API                          ./apis/drive/v2/rest
...
storage           Cloud Storage API                  ./apis/storage/v1beta1/rest
taskqueue         TaskQueue API                      ./apis/taskqueue/v1beta2/rest
tasks             Tasks API                          ./apis/tasks/v1/rest
translate         Translate API                      ./apis/translate/v2/rest
urlshortener      URL Shortener API                  ./apis/urlshortener/v1/rest
webfonts          Google Web Fonts Developer API     ./apis/webfonts/v1/rest
youtube           YouTube API                        ./apis/youtube/v3alpha/rest
youtubeAnalytics  YouTube Analytics API              ./apis/youtubeAnalytics/v1/rest
$

リスト 11 の出力は、API 名、API の正式名称、各 API の細部にアクセスするための URL パスを示しています。


まとめ

この記事では、インターネットから情報を抽出するための公開 API の強力さについて、例を用いて説明しました。Web スクレイピングや Web スパイダーとは異なり、Web API を利用すると、目的とする特定の情報にアクセスすることができます。インターネット上では新たな価値が生み出されており、単にこれらの API を利用するだけではなく、これらの API を新たな方法で組み合わせることにより、増加を続ける Web ユーザーに新たなデータを提供できるようになります。

ただし API を利用する場合には、得られるものは「それなり」であることを念頭に置く必要があります。使用回数が制限されているという問題は、よくある不満の 1 つですが、API に関するルールが予告なしに変更される場合があることも、アプリケーションを作成する際には考慮する必要があります。比較的最近、Twitter は「より一貫性あるエクスペリエンス」にするために、API を変更しました。この変更は、標準的な Twitter Web クライアントの競合とみなされ得るサードパーティー・アプリケーションの数々にとっては、最悪の事態を意味するものでした。

参考文献

学ぶために

  • HTML Parsing with Ruby and Nokogiri」: Chris Umbel 氏による Ruby で Nokogiri を使用する方法についての簡潔なチュートリアルを調べてください。
  • Ruby での REST (REpresentational State Transfer) を理解する」(M. Tim Jones 著、developerWorks、2012年9月): Ruby 言語において REST の基礎となる概念を説明した記事を読んでください。
  • Information Retrieval, Mining and Integration on the Internet」: この Web 情報の取得に関する一連の講義の記録を詳しく調べてください。
  • ProgrammableWeb: Web サイトとやりとりするための API およびマッシュアップ用に用意されたこの有用なリソースを調べてください。
  • CrunchBase の API: CrunchBase の API について詳しく学んでください。この API は、CrunchBase サイト内でデータの JSON 表現を公開します。
  • LinkedIn の API: LinkedIn の API では、REST/JSON または JavaScript を使用して豊富な情報を公開しています。この API を使用すると、いくつもの属性を使用して、プロフィール・データ、つながり、ソーシャル・ストリーム、企業、人を検索することができます。
  • LinkedIn における認証: LinkedIn が OAuth を使用してユーザーを認可し、API を利用する権限を付与する方法についての詳細を読んでください。
  • Yelp の API: さまざまな検索方法を使用して、商業施設に関するリアルタイムの情報を入手してください。結果には、商業施設に関する評価、レビュー、特別サービスなどの情報が含まれています。
  • OpenCrypt IP Location API Service: IP アドレスを一般的な地理的情報に変換してください。
  • Google APIs Discovery Service: 利用可能な Google API を列挙し、それら API のメソッドや各メソッドのパラメーターなど、API のメタデータを抽出してください。

製品や技術を入手するために

  • Nokogiri: HTML 文書から XML または JSON への構文解析をサポートする Ruby 用スクレイピング・ソリューションを入手してください。
  • pjscrape: このクライアント・サイド Web スクレイピング用の JavaScript フレームワークについて調べてください。
  • Beautiful Soup: スクリプト言語として Python を選択した場合は、このスクレイピング・ライブラリーを試してください。
  • IBM 製品の評価をご自分に最適な方法で行ってください。評価の方法としては、製品の評価版をダウンロードすることも、オンラインで製品を試してみることも、クラウド環境で製品を使用することもできます。

議論するために

  • developerWorks コミュニティーに参加してください。ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者によるブログ、フォーラム、グループ、Wiki を調べることができます。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Open source, Web development
ArticleID=960401
ArticleTitle=Ruby を使用して Web から情報を抽出する
publish-date=01232014