2014-12-23 27 views
0

你好,我正試圖從ESPN.com撤回名單信息。每個球隊的名單都保存在一張桌子上。我試圖想方設法將每個標籤保存到變量中,但每個標籤都沒有「jersey_number」/「player_name」之類的標識,因此通過搜索可以發現一些問題。這是我迄今爲止 - 如果你能給我一個指針或2,將不勝感激。沒有屬性的簡單Dom HTML標籤

<?php 
    require_once("../tools/simple_html_dom.php"); 
    require_once("../tools/Utilities.php"); 
    $url = "http://espn.go.com/nfl/team/roster/_/name/den/denver-broncos"; 

    $espnHTML = file_get_html("http://espn.go.com/nfl/team/roster/_/name/den/denver-broncos"); 



    foreach($espnHTML->find("table.tablehead",0)->find('tr[class^=odd]') as $rosterRow) 
    { 
     foreach($rosterRow->find("td") as $playerInfo) 
     { 
      echo $playerInfo->plaintext."<br>"; 
     } 

    } 
    ?> 

如何將這些td標籤分配到沒有「id」的適當變量?附件是一個示例截圖,可以幫助您瞭解我在說什麼。 enter image description here

回答

1

如果每列玩家的排列順序相同,則使用您的$rosterrow->find("td")應返回一個索引數組,您可以使用$playerrow[0..n]訪問該數組。 然後,通過分析哪些對應於什麼,你可以做這樣的功能:

$players = array(); 
foreach($espnHTML->find("table.tablehead",0)->find('tr[class^=odd]') as $rosterRow) 
{ 
    $playerRow = $rosterRow->find("td"); 
    $name = $playerRow[0]; 
    $jersey = $playerRow[1]; 
    // more can be added, of course. 

    $players[$name] = array(); 
    $players[$name]["jersey"] = $jersey; 
    // and others 
} 

對於表

John Appleseed | 12 
---------------|---- 
Richard Brooks | 34 

這將導致數組一樣

{ "John Appleseed" => { "jersey" => 12 }, "Richard Brooks" => { "jersey" => 34}} 

請讓我知道這是否有幫助。

+0

謝謝你的幫助我出局 – Pmike86

1

如果您打算採用不同的方法,可能更具可擴展性/可靠性,那麼您可能還想看看Kimono Labs。您可以使用它來創建基於ESPN數據的結構化API。我認爲你可以定義表格的哪一部分包含名稱,分數等,並且可以很容易地調用API獲取所需的信息。

+0

謝謝你我會研究一些。我沒有意識到這是可用的。 – Pmike86

+0

這是一個虛假的建議。有很多應用程序承諾在不編寫代碼的情況下刮取網站,但它們都是有缺陷的,它們不屬於SO。 – pguardiario