2017-03-14 26 views
0

背景:我开始为疯狂三月开发一个js程序,我试图弄清楚如何从一个网站获取信息并使用该信息填写我的所有信息数据在我的程序中。例如,我想从一个网站上抽出所有的投篮命中率,篮板,抢断,封盖,失误等等,然后使用这些数据来比较我的程序中的两个球队。我会如何去做这件事?到目前为止,我试图将网页转换为JSON字符串,然后处理该字符串,但效果不佳。从一个网页中提取信息并在我的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

我使用YQL将网站转换为JSON字符串。 –

+0

你仍然没有展示你已经尝试过的东西,你的问题仍然不清楚你想要达到什么目的(除了你想要对你的程序做什么之外,除非你确实要求我们制作该程序您)。 – GGG

回答

0

网页抓取可真苦。您获取的数据格式可以随时更改。数据是在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' 
// } 

但也有很多其他的方式来处理数据。如果您不熟悉,请阅读JavaScript Array方法,例如Array.reduce(),Array.map(),Array.forEach()等。这些将帮助您处理任何有用的数据,以获得更方便的形式。但请记住,这个过程本质上是脆弱的,因为您检索的表/页面结构可能会突然变化。欲了解更多信息,在Ruby上下文中(但原则是独立于语言的),您可以从http://ruby.bastardsbook.com/chapters/web-scraping/开始并进一步研究。

另一种选择是从一个结构化的API获得NCAA的数据,但可以是非常昂贵:http://developer.sportradar.com/pricing#basic-4

请记住,你只应该在这里问的问题是非常具体:“我需要做的事情,在这里是我尝试这样做的方式,这种方式完全是这样的,我尝试了其他方法来修复它,但我被卡住了。“不要只问“你能告诉我如何为我做我的工作吗?”祝你好运!

+0

感谢您的帮助!对不起,这个问题不够具体。 –

+0

没问题!如果它提供了一个好的方向,请接受这个答案。 –