2013-04-02 2 views
4

Я только начинаю с упомянутого Parser и как-то работает на проблемах непосредственно с самого начала.Найти div с классом, используя PHP Простой HTML DOM Parser

Ссылаясь на этот учебник:

http://net.tutsplus.com/tutorials/php/html-parsing-and-screen-scraping-with-the-simple-html-dom-library/

Я хочу сейчас просто найти в содержании исходного кода TNE в виде DIV с классом ClearBoth Box

я получить код с завитком и создать простой HTML DOM объект:

$cl = curl_exec($curl); 
$html = new simple_html_dom(); 
$html->load($cl); 

Затем я хотел бы добавить содержимое DIV в массиве называется дива:

$divs = $html->find('div[.ClearBoth Box]'); 

Но теперь, когда я print_r в $ дивы, это дает гораздо больше, несмотря на то, что исходный код имеет не более внутри дел.

Как это:

Array 
(
    [0] => simple_html_dom_node Object 
     (
      [nodetype] => 1 
      [tag] => br 
      [attr] => Array 
       (
        [class] => ClearBoth 
       ) 

      [children] => Array 
       (
       ) 

      [nodes] => Array 
       (
       ) 

      [parent] => simple_html_dom_node Object 
       (
        [nodetype] => 1 
        [tag] => div 
        [attr] => Array 
         (
          [class] => SocialMedia 
         ) 

        [children] => Array 
         (
          [0] => simple_html_dom_node Object 
           (
            [nodetype] => 1 
            [tag] => iframe 
            [attr] => Array 
             (
              [id] => ShowFacebookButtons 
              [class] => SocialWeb FloatLeft 
              [src] => http://www.facebook.com/plugins/xxx 
              [style] => border:none; overflow:hidden; width: 250px; height: 70px; 
             ) 

            [children] => Array 
             (
             ) 

            [nodes] => Array 
             (
             ) 

Я не понимаю, почему $ дивы есть не просто код с DIV?

Вот пример исходного кода на сайте:

<div class="ClearBoth Box"> 
      <div> 
<i class="Icon SmallIcon ProductRatingEnabledIconSmall" title="gute peppige Qualität: Sehr empfehlenswert"></i> 
<i class="Icon SmallIcon ProductRatingEnabledIconSmall" title="gute peppige Qualität: Sehr empfehlenswert"></i> 
<i class="Icon SmallIcon ProductRatingEnabledIconSmall" title="gute peppige Qualität: Sehr empfehlenswert"></i> 
<i class="Icon SmallIcon ProductRatingEnabledIconSmall" title="gute peppige Qualität: Sehr empfehlenswert"></i> 
<i class="Icon SmallIcon ProductRatingEnabledIconSmall" title="gute peppige Qualität: Sehr empfehlenswert"></i> 

       <strong class="AlignMiddle LeftSmallPadding">gute peppige Qualität</strong> <span class="AlignMiddle">(17.03.2013)</span> 
      </div> 
      <div class="BottomMargin"> 
      gute Verarbeitung, schönes Design, 
      </div> 
     </div> 

Что я делаю неправильно?

ответ

4

Правильный код, чтобы получить DIV с классом:

$ret = $html->find('div.foo'); 
//OR 
$ret = $html->find('div[class=foo]'); 

В принципе вы можете получить элементы, как вы с помощью селектора CSS.

http://simplehtmldom.sourceforge.net/manual.htm
Как найти HTML-элементы? раздел, вкладка Advanced

+1

Спасибо так много! Теперь я немного дальше! В моем случае, поскольку имя класса состоит из двух частей «ClearBoth Box», я должен использовать: div [class = ClearBoth Box], потому что div.ClearBoth Box ищет элемент Box после div, и только div.ClearBoth возвращает больше совпадений, чем Мне нужно. – Owl

+0

Что делать, если мой div не имеет имени класса? Я хочу, чтобы все div на странице? – amitchhajer

+0

@amitchhajer Вы либо находите элемент с уникальным идентификатором выше или ниже для вашего div в вопросе, а затем больше с дочерним, родительскими методами или вы печатаете внешний текст того, где вы находитесь (объект dom), и подсчитываете, сколько divs есть до тот, который вам нужен, и получить к нему доступ через его номер. 4-й div = dom-> find ('div', 3); –

5
$html = new simple_html_dom(); 
$html->load($output); 
$items = $html->find('div.youclassname',0)->children(1)->outertext; 
print_r($items); 
+0

с "-> детьми (1) -> наружный текст" Я получаю: имя функции должно быть строкой в ​​.. – delive