php
  • xpath
  • 2016-04-28 47 views 1 likes 
    1

    我想從這個URL http://www.homegate.ch/kaufen/105652197?3檢索所有圖像。我在PHP中使用Xpaths。出於某種原因,我可以用Xpath檢索身體,但不能檢索圖像。這裏是我的腳本:PHP Xpath返回節點的身體,而不是圖像

    <?php 
    
    $url = "http://www.homegate.ch/kaufen/105652197?3"; 
    
    $body = '//body'; 
    $img = '//img'; 
    
    $html = file_get_contents($url); 
    
    # Call htmlentities as the $url content is not well-formatted: http://stackoverflow.com/questions/1685277/warning-domdocumentloadhtml-htmlparseentityref-expecting-in-entity 
    $html = htmlentities($html); 
    
    $dom = new DOMDocument(); 
    $dom->loadHTML($html); 
    
    $xpath = new DomXPath($dom); 
    
    $query = $xpath->query($body); 
    
    if($query->length == 1) 
        echo $query->item(0)->nodeValue; 
    
    if($query->length < 1) 
        echo "Xpath for body is no good!"; 
    
    $query = $xpath->query($img); 
    
    if($query->length == 1) 
        echo $query->item(0)->nodeValue; 
    
    if($query->length < 1) 
        echo "Xpath for image is no good!"; 
    

    運行此腳本返回:

    1. <!DOCTYPE html>.. 
    2. Xpath for image is no good! 
    

    這是怎麼回事錯在這裏? - 爲什麼是XPath只工作body而不是img

    +0

    var_dump($ query)給你什麼? –

    +0

    'object(DOMNodeList)#3(1){[「length」] => int(0)}' – user1965074

    回答

    0

    你必須刪除此行:

    $html = htmlentities($html); 
    

    爲了避免DOM警告,使用語法來代替:

    $dom = new DOMDocument(); 
    libxml_use_internal_errors(True);   # <------- 
    $dom->loadHTML($html); 
    

    與您語法,//body XPath查詢顯然沒問題,但是對於這個內容:

    <!DOCTYPE html> 
    <html prefix="og: http://ogp.me/ns#" class="no-js unknown unknown" lang="de"> 
    <head><script type="text/javascript" src="/ver-20160426133955/assets/js/jquery.js"></script> 
    (...) 
    

    那顯然不是身體!

    相關問題