2011-09-22 1 views
0

que je suis une version simplifiée du tutoriel de grattage par Nettuts ici, qui trouve essentiellement les divs avec class=previewsimple HTML DOM ne reçoit que 1 élément

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

Ceci est mon code. Le problème est que quand je compte $items je reçois seulement 1, donc il obtient seulement le premier div avec class=preview, pas tous.

$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); 
+0

alternatives de tiers proposées à [SimpleHtmlDom] (http://simplehtmldom.sourceforge.net/) qui utilisent effectivement [DOM] (http: // php.net/manual/fr/book.dom.php) au lieu de l'analyse des chaînes: [phpQuery] (http://code.google.com/p/phpquery/), [Zend_Dom] (http: //framework.zend .com/manual/fr/zend.dom.html), [QueryPath] (http://querypath.org/) et [FluentDom] (http://www.fluentdom.org). – Gordon

+0

et si vous avez fait '$ items [] = $ html-> find ('div [class = preview]');' ou juste déclaré le tableau en premier. C'est soit ne pas gratter le DOM correctement ou ne pas le stocker correctement. peut-être essayer un 'var_dump ($ html-> find ('div [class = aperçu]'))' –

+0

Vous pouvez comparer la syntaxe de sélection pour phpquery simplehtmldom et ganon [ici] (http://scraperblog.blogspot.com/2012/ 11/choose-php-html-parser.html). Je trouve que phpquery a la syntaxe la plus propre et est la meilleure en général. – pguardiario

Répondre

1

Essayez d'utiliser DOMDocument et 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; }