2017-03-14 8 views
0

背景:私はMarch Madnessのjsプログラムを開始しています。私は1つのWebサイトから情報を引き出し、その情報を使って私のプログラムのデータ。たとえば、私は1つのウェブサイトからすべての撮影パーセンテージ、リバウンド、盗み、ブロック、ターンオーバーなどを引き出し、そのデータを使って自分のプログラムの2つのチームを比較したいと考えています。これをどうやってやりますか?これまでは、WebページをJSON文字列に変換してからその文字列を操作しようとしましたが、うまく機能しません。1つのWebページから情報を引き出し、それを私のjsプログラムで使用する

var getBkpgArray = JSON.parse("table": { 
      "class": "table table-striped table-bordered sticky-enabled", 
      "thead": { 
      "tr": { 
       "th": [ 
       "Rank", 
       "Team", 
       "GM", 
       "BLKS", 
       "BKPG" 
       ] 
      } 
      }, 
      "tbody": { 
      "tr": [ 
       { 
       "class": "odd", 
       "td": [ 
       "1", 
       { 
       "a": { 
        "href": "/schools/minnesota", 
        "content": "Minnesota" 
       } 
       }, 
       "33", 
       "224", 
       "6.8" 
       ]) 

私は配列

+2

あなたが解析しようとしているデータの最小限の検証可能な例と既に試したことを投稿する必要があります。それ以外の場合はお手伝いできません。 – GGG

+0

ウェブサイトをJSON文字列YQLに変換しました。 –

+0

あなたはまだ試したことをまだ見せていませんし、あなたのプログラムで何をしようとしているのかとは別に、あなたが達成したいことについてまだ疑問が残っています。君は)。 – GGG

答えて

0

のWebスクレイピングに、このデータを解析しようとしているファーストは本当に難しいことができます。いつでも変更できる形式でデータを取得しています。データはHTML内部で構造化されていますが、解析するのが非常に難しいかもしれません。例では、ブロックを含む要素はクラスではラベル付けされません。

あなたのような何かするかもしれない:

// this array contains all the stat categories, make it lowercase 
var categories = getBkpgArray['thead']['tr']['th'].map(String.toLowerCase()); 
// this will make an array of objects with team info 
var teams = getBkpgArray['tbody']['tr'].reduce(function (acc, val, idx) { 
    var team_array = val['td']; 
    // go over each team category and give it the right category label 
    var team_object = team_array.reduce(function (acc, val, idx) { 
     var category_name = categories[idx]; 
     // if the category is 'team' get nested team name 
     var category_val = (category_name === 'team') ? val['a']['content'] : val; 
     acc[category_name] = category_value; 
    }, {}); 
    acc.push(team_object); 
}, []); 
// the result is an array of team objects that look like this: 
// { 
//  'rank': '1', 
//  'team': 'Minnesota', 
//  'gm': '33', 
//  'blks': '224', 
//  'bkpg': '6.8' 
// } 

をしかし、データを操作する他の方法がたくさんあります。おなじみでない場合は、Array.reduce()Array.map()Array.forEach()などのJavaScript Arrayメソッドを参照してください。これは、便利なデータを処理するのに役立ちます。しかし、あなたが検索しているテーブル/ページ構造が突然変わる可能性があるので、プロセスは本質的に脆弱であることを常に忘れないでください。その詳細については、Rubyの文脈で(ただし原則は言語に依存しません)ここから始めてhttp://ruby.bastardsbook.com/chapters/web-scraping/を研究してください。

他のオプションは、構造化されたAPIからのNCAAデータを取得することですが、それは非常に高価なことができます:「私は何かをする必要があり、ここに:http://developer.sportradar.com/pricing#basic-4

はあなたが唯一のかなり特定され、ここで質問をする必要があることを忘れないでください私はそれをやろうとした方法です、このようにこのように壊れます、私はそれを修正するためにこれらの他の方法を試みましたが、私は立ち往生しています。ただ「私の仕事をどうやって教えてくれますか?」と聞かないでください。がんばろう!

+0

助けてくれてありがとう!申し訳ありませんが、質問は十分具体的ではありませんでした。 –

+0

問題ありません!それが良い方向を示すなら、この答えを受け入れてください。 –

関連する問題