2012-04-02 36 views
0

我試圖從表中獲取一些數據,其中標記沒有id,class或任何其他可以識別它的屬性。phpQuery - 從沒有類或ID的表中獲取數據

表結構是這樣的:

<table> 
<tr> 
    <td><b>Type</b></td> 
    <td>Plug and Play</td> 
</tr> 
<tr> 
    <td><b>Model</b></td> 
    <td>AH591Z</td> 
</tr> 
<tr> 
    <td><b>Date</b></td> 
    <td>02.04.2012</td> 
</tr> 
<tr> 
    <td><b>Name</b></td> 
    <td>CryptMachine</td> 
</tr> 
<tr> 
    <td><b>ID</b></td> 
    <td>9283</td> 
</tr> 
</table> 

我怎麼會例如獲得型號,名稱和ID卻忽略了日期和類型,因爲我並不需要這些值。

有沒有一個聰明的方法來做到這一點與phpQuery?到目前爲止,我只是玩弄了phpQuery庫,但我肯定已經掌握了基礎知識,但我無法圍繞這一點大腦。

+0

你使用什麼數據庫?如果mysql在查詢中'select model,name,id from tableName' – 2012-04-02 12:46:42

+0

在我看來,他正在從一個他很少控制的現有網站上抓取數據。 – mkoistinen 2012-04-02 13:21:37

回答

0

我還沒有測試過這個,但是這樣的事情可能是這樣嗎?

$doc = phpQuery::newDocumentHTML($theDocument); 
$table = $doc["table"]; 
$model = pq($table)->find("tr:eq(1) td:eq(1)")->text(); 
$id = pg($table)->find("tr:eq(4) td:eq(1)")->text(); 

如果在頁面上有多個table,你可能不得不使用EQ(N)來指定哪一個,請記住,他們是從0枚舉,而不是1

更新:如果你不知道排的順序,你可以使用類似的東西(再次,未經測試,對不起,但應該讓你的指向正確的方向)

<?php 

function getValue($table, $label) { 
    $lable = strtolower($label); 
    $rows = pq('tr', $table); 

    foreach($rows as $row): 
     if (strtolower(pq($row)->find('td:eq(0)').text()) === $label): 
      return pq($row)->find('td:eq(1)').text(); 
     endif; 
    endforeach; 
} 

$doc = phpQuery::newDocumentHTML($theDocument); 
$table = $doc["table"]; 

$model = getValue($table, "Model"); 
$id = getValue($table, "ID"); 

?> 
+0

有沒有什麼方法可以讓您在索引時獲取價值? 類似於:find type或find id – resonance 2012-04-02 12:42:19

+0

當然,你可以遍歷'tr's,然後抓住第一個'td',檢查它是否包含文本()「ID」或「Model」等等,如果所以,你可以抓住下一個'td'並退出循環,對吧? – mkoistinen 2012-04-02 13:20:31

相關問題