2014-10-03 68 views
1

我的表看起來像,PHP Simple HTML DOM - 如何通過TD中的特定值查找表格?

<table width="100%" border="0" cellpadding="2" cellspacing="0"> 
<tr> 
<td><strong>NPA/Area Code:</strong></td> 
<td><a href="/area-code/area-code-229.asp">229</a></td> 
<td><strong>NXX Use Type:</strong></td> 
<td>LANDLINE</td> 
</tr> 
<tr> 
<td><strong>NXX/Prefix:</strong></td> 
<td>428</td> 
<td><strong>NXX Intro Version:</strong></td> 
<td>2000-10-31</td> 
</tr> 
</table> 

有沒有idclass這麼多表,所以找到一個我想是這麼難。我正在考慮使用td中的文本來選擇table。那可能嗎?因爲我想從中抓取數據的網站被編碼爲這種方式。我不確定如何使用Simple HTML DOM操作代碼,選擇此表格,然後選擇td中的文本。我知道如何提取td中的值,所以問題是如何選擇我想要的這個特定表。我想抓取數據的鏈接是,scrape source

任何幫助表示讚賞。 謝謝。

+0

你究竟想要解析什麼? – Ghost 2014-10-03 04:19:38

+0

jQuery可以讓你這樣做:'$('table:has(td:contains(「LANDLINE」))')' - 簡單的做不到,但[這個可以](https://sourceforge.net/projects/ advancedhtmldom/files /?) – pguardiario 2014-10-06 07:26:29

回答

1

我建議你爲該表創建一個標記,因爲你試圖讓表下面的表AreaCode/Prefix 229-428 Details,然後使用它,然後指向下一個兄弟,這是你想要的特定表。例如:

$html = file_get_html('http://www.area-codes.com/exchange/exchange.asp?npa=229&nxx=428'); 
$table = null; 
$needle = 'AreaCode/Prefix 229-428 Details'; 
foreach($html->find('h3') as $marker) { 
    if($marker->innertext == $needle) { 
     $table = $marker->next_sibling(); 
     break; 
    } 
} 

$data = array(); 
if($table) { 
    foreach($table->children() as $k => $tr) { 
     foreach($tr->children as $td) { 
      $data[$k][] = $td->innertext; 
     } 
    } 
} 

echo '<pre>'; 
print_r($data); 
+0

太棒了!謝謝,這正是我所期待的,但沒有能力將它翻譯成代碼:) – Eshwar 2014-10-03 06:54:36

+1

@Eshwar是的,因爲你不能直接指出這麼多表,因爲它們太多了(而且很複雜),這種方式要好得多。我很高興這有助於 – Ghost 2014-10-03 06:57:12

+1

是的,再次感謝,這教會了我關於標記,我很高興和感謝:) – Eshwar 2014-10-03 07:30:16

0

This question可能有幫助。

從本質上講,你可以得到的第n個元素爲這樣:

$table = $html->find('table', 3); 

只要表的數量不會改變,你可以擴展到你想要做什麼。

+0

有嵌套表格。所以計數混亂了。 – Eshwar 2014-10-03 06:44:30

相關問題