2015-05-31 1 views
2

Я пытаюсь найти теги span на веб-сайте, подобные этому: http://www.pointstreak.com/prostats/leagueschedule.html?leagueid=49&seasonid=14225. Теги мне нужны следующие:PHP parsing не найдет теги «span»

enter image description here

Однако, когда я использую такой код, как:

$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); 

Единственный выход я получаю [].

Если я заменяю $statsListings[] = $result_object->nodeValue; на $statsListings[] = $result_object->childNodes->item(0)->nodeValue;, я все равно получаю то же самое [] как выход. Когда есть четкие span теги со значениями, почему я ничего не получаю?

+1

Посмотреть исходный код страницы (а не контрольная консоль). Похоже, что документ используется как большой источник JSON и собран в HTML по JavaScript, поэтому вы не сможете использовать DOMDocument для анализа HTML. Данные, которые вы хотите, скорее всего, где-то в этом JSON. –

+0

В вашем html нет 'span'! – undone

+0

Имеет ли этот сайт надлежащий API для прямого чтения данных, а не для очистки его? –

ответ

3

XPath не виноват вообще. Промежуточные метки добавляются динамически. Просто взгляните на исходный код страницы, а не на DOM-Structure, которая может быть уже изменена javascript, но используйте «view-source:», и вы увидите точно такой же html, как он разбирается XPath.

Было бы неплохо взглянуть на таблицу с классом табличные линии? вероятно, у вас есть все, что вам может понадобиться. Вам следует пропустить «maincolor» и «tableheader» и начать обработку с «легкого» класса.

<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> 

Например, попробуйте следующее:

$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); 

Вероятно, я нашел то, что вам нужно, и даже в хорошей форме JSON: 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} 
+0

То, что я пытаюсь очистить, это табло вверх. Я могу царапать стол с тегами и так хорошо. По какой-то причине тот же метод не найдет теги табло. – Jameson

+2

Я просто объяснил, почему он не находит метки диапазона. Потому что их нет, когда вы загружаете страницу. Просто попробуйте открыть эту страницу с отключенным Javascript, вы поймете, что я имею в виду. –

+1

@Jameson Он объяснил, почему он не находит теги span - _ потому что в то время, когда вы читаете их на PHP, их не существует._ Его ответ правильный, и его советы по его исправлению звучат. – OpenSorceress

 Смежные вопросы

  • Нет связанных вопросов^_^