2012-12-05 12 views
9

Şu anda bir forumdan bazı verileri ayrıştırmaya çalışıyorum. İşte kod: NeyseHTML ile ayrıştırmak için Xpath kullanarak PHP ile

$xml = simplexml_load_file('https://forums.eveonline.com'); 

$names = $xml->xpath("html/body/div/div/form/div/div/div/div/div[*]/div/div/table//tr/td[@class='topicViews']"); 
foreach($names as $name) 
{ 
    echo $name . "<br/>"; 
} 

, sorun bana yolunu yardımcı olmak için google xpath uzantısını kullanıyorum olması ve google yeterince gelmedi yapmak için html değişmekte olduğunu tahmin ediyorum Bu aramayı yapmak için web sitemi kullandığımda. Ev sahibine google chrome üzerinden siteye bakmanın bir yolu var mı? Böylece doğru kodu alıyor? Ne öneriyorsun?

Teşekkürler!

+1

Web tarayıcınızda Javascript'i devre dışı bırakmayı denediniz mi? PHP'niz bunu kullanmayacaktır, dolayısıyla web sitesinde javascript ile yapılan herhangi bir değişiklik sunucuda bulunmayacaktır. –

+0

XPath XML için değil, HTML içindir. – GolezTrol

+1

JS, bu sayfada çalıştırılmıyor. XPath'ın XML için olduğunu anlıyorum, ancak Google aramalarında gördüklerimden, HTML için de popüler. – VixenSoul

cevap

3

Bir çift '/', xpath araması yapar. Yani xpath '// table' kullanırsanız, tüm tabloları alırsınız. Aynı zamanda xpath yapısında xpath 'html/body/div/div/form' altındaki tüm tabloları almak için 'html/body/div/div/form // table' gibi daha derin kullanabilirsiniz. Bu şekilde kodunuzu html kaynağındaki değişikliklere karşı biraz daha dirençli hale getirebilirsiniz.

Kullanmak isterseniz, xpath hakkında biraz bilgi almanızı öneririz. Kopyalama yapıştırma işlemi sadece sizlere ulaşır.

sözdizimi hakkında basit bir açıklama Önerim onunla çalışmak için çok güzel bir arayüz ve görevler çok daha sezgisel hale getirir, çünkü her zaman SimpleXML aksine DOMDocument kullanmaktır http://www.w3schools.com/xpath/xpath_syntax.asp

36

bulunabilir.

Aşağıdaki örnekte, HTML'nin DOMDocument nesnesine nasıl yükleneceği ve DOM'yi XPath kullanarak nasıl sorgulayacağınız gösterilmektedir. Eğer gerçekten yapmanız gereken tüm TD bu XPath sorgusu tarafından döndürülen DOMNodeList bulundu topicViews bir sınıf adı ve bu irade çıkışı nodeValue üyelerinin her biriyle unsurları bulmak.

/* Use internal libxml errors -- turn on in production, off for debugging */ 
libxml_use_internal_errors(true); 
/* Createa a new DomDocument object */ 
$dom = new DomDocument; 
/* Load the HTML */ 
$dom->loadHTMLFile("https://forums.eveonline.com"); 
/* Create a new XPath object */ 
$xpath = new DomXPath($dom); 
/* Query all <td> nodes containing specified class name */ 
$nodes = $xpath->query("//td[@class='topicViews']"); 
/* Set HTTP response header to plain text for debugging output */ 
header("Content-type: text/plain"); 
/* Traverse the DOMNodeList object to output each DomNode's nodeValue */ 
foreach ($nodes as $i => $node) { 
    echo "Node($i): ", $node->nodeValue, "\n"; 
} 
İlgili konular