2011-03-14 2 views
1

Спасибо, что нашли время, чтобы прочитать мой пост ... Я пытаюсь извлечь некоторую информацию из моего сайта с помощью простого HTML Dom ...Простого HTML Dom

Я его чтения из источника HTML ок, теперь я просто пытаюсь извлечь нужную мне информацию. У меня есть ощущение, что я собираюсь об этом в ту сторону ... Вот мой сценарий ...

<?php 

include_once('simple_html_dom.php'); 

// create doctype 
$dom = new DOMDocument("1.0"); 

// display document in browser as plain text 
// for readability purposes 
//header("Content-Type: text/plain"); 

// create root element 
$xmlProducts = $dom->createElement("products"); 
$dom->appendChild($xmlProducts); 

$html = file_get_html('http://myshop.com/small_houses.html'); 
$html .= file_get_html('http://myshop.com/medium_houses.html'); 
$html .= file_get_html('http://myshop.com/large_houses.html'); 

    //Define my variable for later 
    $product['image'] = ''; 
    $product['title'] = ''; 
    $product['description'] = ''; 

foreach($html->find('img') as $src){ 

    if (strpos($src->src,"http://myshop.com") === false) { 
     $src->src = "http://myshop.com/$src->src"; 
    } 
     $product['image'] = $src->src; 
} 

foreach($html->find('p[class*=imAlign_left]') as $description){ 
     $product['description'] = $description->innertext; 
} 

foreach($html->find('span[class*=fc3]') as $title){ 
     $product['title'] = $title->innertext; 
} 

echo $product['img']; 
echo $product['description']; 
echo $product['title']; 

?> 

Я положил эхо на конце ради тестирования ... но я ничего не получаю ... Любые указатели будут отличной ПОМОЩЬЮ!

Благодаря

Чарльз

+0

Вы не можете объединять элементы документа DOM. Поместите 'error_reporting (E_ALL);' в верхней части файла, чтобы увидеть, какие ошибки вы получите. –

+0

Отличный материал, который может быть! Спасибо Felix, я дам ему –

+0

, который не исправит вашу проблему, он просто отобразит ошибки, которые вызывает ваш код, а также @Felix King: я думаю, что метод __toString находится в HTMLDom, поэтому он может конкатенатироваться, но затем он пытается зациклить строку как объект. – RobertPitt

ответ

2

file_get_html() возвращает HTMLDom объект, и вы не можете сцепить объектов, хотя HTMLDom имеют методы __tostring когда сцепляются там более Лилли коррумпированными в некотором роде, попробуйте следующее:

<?php 

include_once('simple_html_dom.php'); 

// create doctype 
$dom = new DOMDocument("1.0"); 

// display document in browser as plain text 
// for readability purposes 
//header("Content-Type: text/plain"); 

// create root element 
$xmlProducts = $dom->createElement("products"); 
$dom->appendChild($xmlProducts); 

$pages = array(
    'http://myshop.com/small_houses.html', 
    'http://myshop.com/medium_houses.html', 
    'http://myshop.com/large_houses.html' 
) 


foreach($pages as $page) 
{ 
    $product = array(); 
    $source = file_get_html($page); 

    foreach($source->find('img') as $src) 
    { 
     if (strpos($src->src,"http://myshop.com") === false) 
     { 
      $product['image'] = "http://myshop.com/$src->src"; 
     } 
    } 

    foreach($source->find('p[class*=imAlign_left]') as $description) 
    { 
     $product['description'] = $description->innertext; 
    } 

    foreach($source->find('span[class*=fc3]') as $title) 
    { 
     $product['title'] = $title->innertext; 
    } 

    //debug perposes! 

    echo "Current Page: " . $page . "\n"; 
    print_r($product); 
    echo "\n\n\n"; //Clear seperator 
} 
?> 
+0

Спасибо, что Роберт, гораздо лучший способ сделать это! Однако у него все еще есть ошибка где-то? нет ошибок просто пустой экран ...? –

+0

SWEEEEET это было просто; отсутствует от $ pages = array ( ... ) –

+0

Спасибо, Роберт за вашу помощь! топ мужчина –

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