PHP + SimpleXML kullanarak Kazıma ...

5 Cevap php

Bir web sitesinden ham belirli bir metin biraz kapmak için çalışıyorum. Bu siteyi ve diğer kaynakları kullanarak, ben SimpleXML ve XPath kullanarak belirli görüntüleri kapmak için nasıl öğrendi.

Ancak aynı yaklaşım ham metin kapma için çalışıyor görünmüyor. İşte şu anda çalışıyor DEĞİLDİR buydu.

// first I set the xpath of the div that contains the text I want
$xpath = '//*[@id="storyCommentCountNumber"]';

// then I create a new DOM Document
$html = new DOMDocument();

// then I fetch the file and parse it (@ suppresses warnings).
@$html->loadHTMLFile($url);

// then convert DOM to SimpleXML
$xml = simplexml_import_dom($html);   

// run an XPath query on the div I want using the previously set xpath
$commcount = $xml->xpath($xpath);
print_r($commcount);

Ben bir resim kapma olduğumda Şimdi, bu commcount nesne yere içindeki görüntülerin kaynağını içeren bir dizi dönecekti.

Bu durumda, ben bu nesne "storyCommentCountNumber" div bulunan ham metin dönmek istiyorum. Ama bu metin Div sadece adı, nesnenin içerdiği gibi görünmüyor.

Ben yanlış ne yapıyorum? Ben tür bu yaklaşım, sadece HTML elemanları ve bunların içinde bit, değil ham text kapma için olduğunu görebilirsiniz. Nasıl bu div içindeki metni alabilirim?

Teşekkürler!

5 Cevap

Unutulmaması gereken bir şey, SimpleXML üzerinde print_r veya var_dump kullanırken zaman nesnesi (veya bazen nitelikleri) ve "metin" görmezsiniz nesneleri olmasıdır. Yani everything çıktı tam XML string $ değişken> asXML () kullanarak görmek olmalı.

Ve bir dize SimpleXML nesne artığını gerekir metni almak için. Bu otomatik innerText çeker.

 /* remember $commcount is always an array from the xpath */
 foreach($commcount as $str)
 {
     echo (string)$str;
 }

Umarım yukarıda bir başlangıç ​​verebilirim.

(Eğer seçiyoruz? Elemanı önce ve sonra belki bir kaç hatları dahil) HTML bir örnek ve print_r gelen çıkış () ekleyebilirim?

Bunu size yardımcı olmadığını görmek için aşağıdaki deneyebilirsiniz:

if ( count($commcount) > 0 ) {
    $divContent = $commcount[0]->asXml();
    print $divContent;
}

Ben SimpleXML kullanmaya çalışıyoruz biliyorum, ama ben çiğ metin kapma normal bir ifade ile daha kolay olacağını düşünürdüm.

this sayfasını kontrol etmeyi deneyin.

:)

Div içindeki ham metin ziyade div elemanın ilk çocuk düğümün parçası, div elemanının kendisinin bir parçası değildir. Aradığınız verileri içeren div içinde bir metin düğümü olmalıdır.