douguanyan9928 2015-05-31 02:27
浏览 62
已采纳

PHP解析将找不到“span”标记

I'm trying to find the span tags on a website similar to this: http://www.pointstreak.com/prostats/leagueschedule.html?leagueid=49&seasonid=14225. The tags I need are these:

enter image description here

However, when I use code such as the following:

    $my_url = 'http://www.pointstreak.com/prostats/leagueschedule.html?leagueid=49&seasonid=14225';
    $html = file_get_contents($my_url);
    $dom = new DOMDocument();
    $dom->loadHTML($html);
    $xpath = new DOMXPath($dom);

    //Put your XPath Query here
    $my_xpath_query = "//span";
    $result_rows = $xpath->query($my_xpath_query);

    // Create an array to hold the content of the nodes
    $statsListings = array();

    //here we loop through our results (a DOMDocument Object)
    foreach ($result_rows as $result_object) {
        $statsListings[] = $result_object->nodeValue;
    }


    echo json_encode($statsListings);

The only output I get is [].

If I replace $statsListings[] = $result_object->nodeValue; with $statsListings[] = $result_object->childNodes->item(0)->nodeValue;, I still get the same [] as output. When there are clearly span tags with values, why am I getting nothing?

  • 写回答

1条回答 默认 最新

  • douzhi1813 2015-05-31 03:14
    关注

    XPath is not guilty at all. Span tags are added dinamically. Just have a look at the source code of the page, not the DOM-Structure, which may be already modified by javascript, but use "view-source:" and you will see exactly the same html, as it is parsed by XPath.

    It would be a good idea to have a look at the table with class tablelines? probably, you have there everything you may need. You should skip "maincolor" and "tableheader", and start processing with "light" class.

    <table width="98%" class="tablelines" cellpadding="2" border="0" cellspacing="1">
    <tr class="maincolor">
        <td colspan="8" align="right">All Times Local</td>
    </tr>
    <tr class="tableheader">
        <td width="4%">
            <b>GN</b>
        </td>
        <td nowrap width="21%">
            <b>AWAY</b>
        </td>
        <td nowrap width="21%">
            <b>HOME</b>
        </td>
        <td width="14%"><b>DATE</b></td>
        <td width="11%"><b>TIME</b></td>
        <td width="8%"><b>SCORE</b></td>
        <td nowrap align="right" width="*"><b>BOXSCORE</b></td>
        <td nowrap align="center" width="4%"><b>GS</b></td>
    </tr>
    <tr class="light">
        <td></td>
        <td><a href="teamplayerstats.html?teamid=3138&seasonid=14225">Sioux City</a>
            <b>1</b></td>
        <td><a href="teamplayerstats.html?teamid=3139&seasonid=14225">Sioux Falls</a>
            <b>5</b></td>
        <td>Tue, Apr 14</td>
        <td> 7:05 PM</td>
        <td> <b>1 - 5</b> </td>
        <td align="right">
            <a href="http://www.pointstreak.com/flashapp/index_hockey_new.html?gameid=2657671" target="_blank"><img src="/images/gamelive_icon.gif" title="Click here for Game Live!" alt="Click here for Game Live" border="0"></a>
            <a href="boxscore.html?gameid=2657671">Final</a></td>
        <td align="center">
            <a href="gamesheet_full.html?gameid=2657671" target="_blank"><img src="/images/playersection/prostats/gslink.gif" border="0"></a>
        </td>
    </tr>
    

    For example, try this:

    $my_url = 'http://www.pointstreak.com/prostats/leagueschedule.html?leagueid=49&seasonid=14225';
    $html = file_get_contents($my_url);
    $dom = new DOMDocument();
    $dom->loadHTML($html);
    $xpath = new DOMXPath($dom);
    
    //Put your XPath Query here
    $my_xpath_query = "//tr[@class='light']/td";
    $result_rows = $xpath->query($my_xpath_query);
    echo $result_rows->length;
    // Create an array to hold the content of the nodes
    $statsListings = array();
    
    //here we loop through our results (a DOMDocument Object)
    foreach ($result_rows as $result_object) {
        $statsListings[] = $result_object->nodeValue;
    }
    
    echo json_encode($statsListings);
    

    Probably I have found what you need, and even in nice JSON form: http://www.pointstreak.com/ajax/trending_ajax.html?action=divisionscoreboard&divisionid=12299&seasonid=14225

    {"trending_list":null,"lacrosse_list":null,"hockey_list":null,"soccer_list":null,"baseball_list":null,"softball_list":null,"basketball_list":null,"news_list":null,"news_hockey_list":null,"news_baseball_list":null,"news_baseball_list2":null,"news_softball_list":null,"news_basketball_list":null,"games_list":[{"status":"FINAL","hometeam":"Sioux Falls","homescore":"4","awayteam":"Muskegon","awayscore":"2","timeremaining":"0:00","currentperiod":"3rd","schedtime":"7:05 pm","gamedate":"15\/05","link":"..\/prostats\/boxscore.html?gameid=2672134"},{"status":"FINAL","hometeam":"Muskegon","homescore":"1","awayteam":"Sioux Falls","awayscore":"6","timeremaining":"0:00","currentperiod":"3rd","schedtime":"7:15 pm","gamedate":"10\/05","link":"..\/prostats\/boxscore.html?gameid=2672133"},{"status":"FINAL","hometeam":"Muskegon","homescore":"2","awayteam":"Sioux Falls","awayscore":"3","timeremaining":"0:00","currentperiod":"1st","schedtime":"7:15 pm","gamedate":"09\/05","link":"..\/prostats\/boxscore.html?gameid=2672132"},{"status":"FINAL","hometeam":"Dubuque","homescore":"3","awayteam":"Muskegon","awayscore":"4","timeremaining":"0:00","currentperiod":"3rd","schedtime":"7:05 pm","gamedate":"05\/05","link":"..\/prostats\/boxscore.html?gameid=2662061"},{"status":"FINAL","hometeam":"Muskegon","homescore":"0","awayteam":"Dubuque","awayscore":"6","timeremaining":"0:00","currentperiod":"3rd","schedtime":"7:15 pm","gamedate":"02\/05","link":"..\/prostats\/boxscore.html?gameid=2662060"},{"status":"FINAL","hometeam":"Sioux Falls","homescore":"7","awayteam":"Tri-City","awayscore":"3","timeremaining":"0:00","currentperiod":"3rd","schedtime":"7:05 pm","gamedate":"02\/05","link":"..\/prostats\/boxscore.html?gameid=2662055"},{"status":"FINAL","hometeam":"Muskegon","homescore":"3","awayteam":"Dubuque","awayscore":"1","timeremaining":"0:00","currentperiod":"3rd","schedtime":"7:15 pm","gamedate":"01\/05","link":"..\/prostats\/boxscore.html?gameid=2662059"},{"status":"FINAL","hometeam":"Sioux Falls","homescore":"4","awayteam":"Tri-City","awayscore":"3","timeremaining":"0:00","currentperiod":"3rd","schedtime":"7:04 pm","gamedate":"01\/05","link":"..\/prostats\/boxscore.html?gameid=2662054"},{"status":"FINAL","hometeam":"Tri-City","homescore":"2","awayteam":"Sioux Falls","awayscore":"3","timeremaining":"0:00","currentperiod":"3rd","schedtime":"7:05 pm","gamedate":"29\/04","link":"..\/prostats\/boxscore.html?gameid=2664638"},{"status":"FINAL","hometeam":"Dubuque","homescore":"7","awayteam":"Muskegon","awayscore":"3","timeremaining":"0:00","currentperiod":"3rd","schedtime":"7:05 pm","gamedate":"25\/04","link":"..\/prostats\/boxscore.html?gameid=2662058"}],"division_list":null,"site_network_title":null,"leagueshortname":"USHL","includesportlink":null,"showleaguename":0}
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助