从一个网页中提取信息并在我的js程序中使用它

时间:2017-03-14 18:37:24

标签: javascript json

背景:我正在为March Madness开始一个js程序,我正在试图弄清楚如何从一个网站提取信息并使用该信息填写我程序中的所有数据。例如,我想从一个网站上获取所有投篮命中率,篮板数,抢断数,盖帽数,失误数等,然后使用该数据比较我的计划中的两支球队。我该怎么做呢?到目前为止,我已尝试将网页转换为JSON字符串,然后操纵该字符串,但它的工作效果不佳。

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"
               ])

首先我试图将这些数据解析成数组

1 个答案:

答案 0 :(得分:0)

网络抓取真的很难。您将以可随时更改的格式获取数据。数据在HTML中构造,可能很难解析:在您的示例中,包含块的元素未标记为类或以其他方式标记,您只能从表的结构中知道。

您可以执行以下操作:

var result = [7, 0, '', false, "words"].filter(v => v);

console.log(result);

但是还有很多其他方法可以操纵数据。如果您不熟悉,请阅读JavaScript // 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()ArrayArray.map()等。这些方法可以帮助您处理您获得的任何有用数据一种更方便的形式。但请始终记住,该过程本质上是脆弱的,因为您正在检索的表/页面结构可能会突然发生变化。有关它的更多信息,在Ruby上下文中(但原则与语言无关),您可以从http://ruby.bastardsbook.com/chapters/web-scraping/开始并进一步研究。

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

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