2010-04-02 37 views
3

我從遠程服務器獲取使用file_get_contents的頁面,但是我想過濾該頁面並從中獲取具有使用PHP的「text」類的DIV。我從DOMDocument開始,但現在我迷路了。如何通過PHP獲取div?

任何幫助?

$file = file_get_contents("xx"); 
$elements = new DOMDocument(); 
$elements->loadHTML($file); 
foreach ($elements as $element) { 
    if(!is_null($element->attributes)) { 
     foreach ($element->attributes as $attrName => $attrNode) { 
      if($attrName == "class" && $attrNode== "text") { 
       echo $element; 
      } 
     } 
    } 
} 

回答

9

一旦文件加載到DOMDocument例如,你可以使用XPath查詢就可以了 - 這可能是比去自己通過DOM更容易。

對此,您可以使用DOMXpath類。


例如,你應該能夠做這樣的事情:

$dom = new DOMDocument(); 
$dom->loadHTML($html); 

$xpath = new DOMXPath($dom); 
$tags = $xpath->query('//div[@class="text"]'); 
foreach ($tags as $tag) { 
    var_dump($tag->textContent); 
} 


(未測試,因此您可能需要適應XPath查詢有點...)

+0

警告仍然產生警告:DOMDocument :: loadHTML()[domdocument.loadhtml]:htmlParseEntityRef:expectcting';'在實體中,行:5不知道爲什麼 – trrrrrrm 2010-04-02 17:10:03

+0

也許在文檔中存在問題?不過,如果它正確加載,可以使用'@'運算符*(請參閱http://fr.php.net/manual/en/language.operators.errorcontrol.php)來消除該錯誤。注意:使用該操作符不是一個好的實踐,你應該儘可能少! – 2010-04-02 17:11:58

6

我個人喜歡Simple HTML Dom Parser

include "lib.simple_html_dom.php" 

$html = file_get_html('http://scrapeyoursite.com'); 
$html->find('div.text')->plaintext; 

很簡單,是吧?它可容納選擇像jQuery :)

+0

Thanks @maček..你可能已經過了這個年齡,但我只是需要這樣的東西。乾杯! – teutara 2013-06-05 11:45:34

0

可以使用simple_html_dom喜歡這裏simple_html_dom doc

或使用我的代碼,喜歡這裏:

include "simple_html_dom.php"; 
$html = new simple_html_dom(); 
$html->load_file('www.yoursite.com'); 
$con_div = $html->find('div',0);//get value plaintext each html 

呼應明文$ con_div ..

$con_div->plaintext; 

這意味着你會發現數組中的第一個div('div',0)並以明文形式顯示出來。 我希望它能幫助你:加油

+0

這有抓住unicode字符的問題。 – astroanu 2015-04-22 05:54:24