Простой HTML DOM получает только 1 элемент

Я следую упрощенной версии учебника по очистке от NetTuts здесь, который в основном находит все div с class=preview

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

Это мой код. Проблема в том, что когда я считаю $items, я получаю только 1, поэтому получается только первый div с class=preview, а не все.

$articles = array();   
$html = new simple_html_dom();
$html->load_file('http://net.tutsplus.com/page/76/');

$items = $html->find('div[class=preview]');  
echo "count: " . count($items);

person sameold    schedule 22.09.2011    source источник
comment
Предлагаемые сторонние альтернативы SimpleHtmlDom, которые фактически используют DOM вместо разбора строк: phpQuery, Zend_Dom, QueryPath и FluentDom.   -  person Gordon    schedule 23.09.2011
comment
что, если бы вы сделали $items[] = $html->find('div[class=preview]'); или просто сначала объявили массив. Это либо не очищает DOM должным образом, либо не хранит его должным образом. может попробовать var_dump($html->find('div[class=preview]'))   -  person Cory Danielson    schedule 23.09.2011
comment
Вы можете сравнить синтаксис выбора для simplehtmldom phpquery и ganon здесь. Я считаю, что phpquery имеет самый чистый синтаксис и в целом лучше.   -  person pguardiario    schedule 06.11.2012


Ответы (1)


Попробуйте использовать DOMDocument и DOMXPath:

$file = file_get_contents('http://net.tutsplus.com/page/76/');
$dom = new DOMDocument();
@$dom->loadHTML($file);
$domx = new DOMXPath($dom);
$nodelist = $domx->evaluate("//div[@class='preview']");
foreach ($nodelist as $node) { print $node->nodeValue; }
person Rusty Fausak    schedule 22.09.2011