2015-11-12 1 views
0

Я действительно пытаюсь очистить таблицу либо через XPath, либо какой-либо метод getElement. Я искал вокруг и пытался использовать различные подходы к решению моей проблемы ниже, но придумал короткий и очень ценю любую помощь.Scrape Таблица DOMDocument для PHP

Во-первых, HTML часть Я пытаюсь скрести это второй стол на документе и выглядит следующим образом:

<table class="table2" border="1" cellspacing="0" cellpadding="3"> 
<tbody> 
<tr><th colspan="8" align="left">Status Information</th></tr> 
<tr><th align="left">Status</th><th align="left">Type</th><th align="left">Address</th><th align="left">LP</th><th align="left">Agent Info</th><th align="left">Agent Email</th><th align="left">Phone</th><th align="center">Email Tmplt</th></tr> 
<tr></tr> 
<tr> 
<td align="left">Active</td> 
<td align="left">Resale</td> 
<td align="center">*Property Address*</td> 
<td align="right">*Price*</td> 
<td align="center">*Agent Info*</td> 
<td align="center">*Agent Email*</td> 
<td align="center">*Agent Phone*</td> 
<td align="center">&nbsp;</td> 
</tr> 
<tr> 
<td align="left">Active</td> 
<td align="left">Resale</td> 
<td align="center">*Property Address*</td> 
<td align="right">*Price*</td> 
<td align="center">*Agent Info*</td> 
<td align="center">*Agent Email*</td> 
<td align="center">*Agent Phone*</td> 
<td align="center">&nbsp;</td> 
</tr> 
...etc 

С дополнительными ТРС продолжающих, содержащий 8 ТДС с той же информации, как описано выше.

Что мне нужно сделать, это перебирать trs и внутренние tds для получения каждой части информации (внутри td) для каждой записи (внутри tr).

Вот код, который я боролся с:

<?php 

$payload = array(
    'http'=>array(
    'method'=>"POST", 
    'content'=>'key=value' 
    ) 
); 
stream_context_set_default($payload); 
$dom = new DOMDocument(); 
libxml_use_internal_errors(TRUE); 
$dom->loadHTMLFile('website-scraping-from.com'); 
libxml_clear_errors(); 

foreach ($dom->getElementsByTagName('tr') as $row){ 
    foreach($dom->$row->getElementsByTagName('td') as $node){ 
     echo $node->textContent . "<br/>"; 
    } 

} 


?> 

Этот код не возвращается почти то, что мне нужно, и я имею много проблем, пытаясь выяснить, как это исправить, возможно, XPath является лучший путь для поиска таблицы/информации, в которой я нуждаюсь, но я тоже придумал этот метод. Любая информация очень ценится.

Если это имеет значение, моя конечная цель состоит в том, чтобы иметь возможность принимать данные таблицы и выгружать ее в базу данных, если первый td имеет значение «Активный».

+0

'Еогеасп ($ dom-> getElementsByTagName ('тр') в $ строке) { Еогеасп ($ row-> getElementsByTagName ('тд ') как $ node) { echo $ node-> textContent. "
"; } } 'Только что отредактировал второй foreach ... –

ответ

0

Может ли это быть полезной?

$table = $dom->getElementsByTagName('table')->item(1); 
foreach ($table->getElementsByTagName('tr') as $row){ 
    $cells = $row->getElementsByTagName('td'); 
    if ($cells->item(0)->nodeValue == 'Active') { 
     foreach($cells as $node){ 
      echo $node->nodeValue . "<br/>"; 
     } 
    } 
} 

Это будет получать вторую таблицу, а также отображать содержимое строк, начиная с первой ячейки «Активный».

Edit: Вот более обширная помощь:

$arr = array(); 
$table = $dom->getElementsByTagName('table')->item(1); 
foreach ($table->getElementsByTagName('tr') as $row){ 
    $cells = $row->getElementsByTagName('td'); 
    if ($cells->item(0)->nodeValue == 'Active') { 
     $obj = new stdClass; 
     $obj->type = $cells->item(1)->nodeValue; 
     $obj->address = $cells->item(2)->nodeValue; 
     $obj->price = $cells->item(3)->nodeValue; 
     $obj->agent = $cells->item(4)->nodeValue; 
     $obj->email = $cells->item(5)->nodeValue; 
     $obj->phone = $cells->item(6)->nodeValue; 
     array_push($arr, $obj); 
    } 
} 
print_r($arr); 
+0

Я думаю, что это было именно то, что мне было нужно, если бы я понял это правильно" -> item (1) "доставил бы меня во вторую (0,1) таблицу тег, найденный внутри DOM? Извините, это все для меня ново, никогда не приходилось делать что-либо подобное. – user2844975

+0

Да! Элементы начинаются с 0, 1, 2 и так далее! –

+0

Человек, большое вам спасибо за вашу помощь. Думаю, я получил его, как только хочу. Пойду немного поработать с ним, а затем я помету это как ответ. Я очень ценю это. – user2844975