2016-04-14 6 views
2

Merhaba, burada bir duvara isabet ediyor gibi görünüyor, bu haritayı kazıyarak aktaran sunucu sayısını belirten basit bir betik oluşturmayı deniyorum. sayfa, ".row ark_srv1" sınıfıyla birlikte div'ları sayıyor ve bu sayının yankılanıyor.Kazıma sayfası daha sonra belirli bir sınıfın div sayısını sayar ve bu sayıyı yankılanır.

Sorun: Bir alternatif olarak

<?php 

$html_string = file_get_contents('toparkservers.com/1/search/?term=Umassoura'); 

function getElementsByClassName($elements, $className) { 
    $matches = array(); 
    foreach($elements as $element) { 
     if (!$element->hasAttribute('class')) { 
      continue; 
     } 
     $classes = preg_split('/\s+/', $element->getAttribute('class')); 
     if (! in_array($className, $classes)) { 
      continue; 
     } 
     $matches[] = $element; 
    } 
    return $matches; 
} 

$dom = new DOMDocument; 
$dom->loadHTML($html_string); 
$divs = getElementsByClassName($dom->getElementsByTagName('.row ark_srv1'), '.row ark_srv1'); 
$length = $divs->length; 

echo count($divs); 

?> 
+0

'$ dom-> getElementsByTagName ('. Satır ark_srv1 ')' - Bu ('. Satır ark_srv1') 'getElementsByClassName olmamalı' ? '.row' bir sınıf mıdır? div "Etiket Adı" olurdu? –

cevap

3

, neden sınıf adına göre öğeleri almak için xpath kullanın: Senaryo 0 Burada

ben birlikte şimdiye kadar tokat başarmış budur döndürür

$html_string = file_get_contents('http://toparkservers.com/1/search/?term=Umassoura'); 
$dom = new DOMDocument; 
libxml_use_internal_errors(true); 
$dom->loadHTML($html_string); 
libxml_clear_errors(); 
$xpath = new DOMXpath($dom); 
$class = 'row ark_srv1'; 
$elements = $xpath->query("//*[contains(@class, '{$class}')]"); 
echo 'elements found: ', $elements->length; 
+1

Çok daha güzel. Ben aynı örneği formüle ediyordum ama geçersiz HTML'de takıldım :) –

+0

@RobbieAverill size onu yendi: p – Ghost

+0

Dude müthiş teşekkür ederim! –

0

HTML'yi ayrıştırırken, XPath'u kullanmayı seviyorum.

$doc = new DOMDocument(); 
$doc->loadHTML($html); 
$xpath = new DOMXPath($doc); 
$divs= $xpath->query("//div[@class='className']"); 
echo count($divs); 
0

Kullanılacak isteyeceğini QueryPath:

<?php 

print html5qp('http://toparkservers.com/1/search/?term=Umassoura', '.row.ark_srv1')->length; 
// 9 
İlgili konular