2012-01-17 27 views
3
function getPage($url) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $result = curl_exec($ch); 
    curl_close($ch); 

    return $result; 
} 

$page = getPage(trim('http://localhost/test/test.html')); 


$dom = new DOMDocument(); 
$dom->loadHTML($page); 
$xp = new DOMXPath($dom); 
$result = $xp->query("//img[@class='wallpaper']"); 

我试图找到所有图像的类wallpaper,现在我坚持那一点。我试图var_dump($result),但它给了我一个奇怪的object(DOMNodeList)[3]。我如何最终获得图像的src?使用dom获取卷曲html中图像的src

回答

-1

尝试

echo $result->getAttribute('src'); 
+1

'$ result'不会有'的getAttribute()'方法。 – alex 2012-01-17 03:49:44

2

$resultDOMNodeList对象。

你可以发现它有多少项目包含

$count = $result->length; 

您访问项目单独使用DOMNodeList::item()

if ($result->length > 0) { 
    $first = $result->item(0); 
    $src = $first->getAttribute('src'); 
} 

您也可以重复它像一个数组,如

foreach ($result as $img) { 
    $src = $img->getAttribute('src'); 
} 
+0

@alex感谢您的错字修复。在这里飞来飞去的一些奇怪的降价 – Phil 2012-01-17 03:50:58

+0

我已经+1了,因为我看不到任何值得赞扬的东西。 – alex 2012-01-17 03:53:01

+0

嗨,我更新了一下这个问题,它的工作原理如果'$ page'是一个简单的字符串,但它不会'$ page'来自cURL'ed数据。我得到一个'result->长度'0 – Michelle 2012-01-17 04:13:10

1

您可以通过访问DOMNodeList中的图像循环。

foreach($result as $img) { 
    echo $img->getAttribute('src'); 
} 

你可以得到第一个echo $result->item(0)->getAttribute('src')。您可以通过检查$resultlength财产确认DOMNodeList有项目。

2

除了@菲尔的回答,您也可以直接在你的XPath查询抢src属性,而不是抓住img元素:

$srcs = array(); 
$result = $xp->query("//img[@class='wallpaper']/@src"); 
foreach($result as $attr) { 
    $srcs[] = $attr->value; 
} 
+0

尼斯,特别是如果属性是所有的OP后 – Phil 2012-01-17 03:58:44

+0

嗨,我更新了一下问题,它的工作原理,如果'$ page'是一个简单的字符串,但它如果'$ page'来自cURL的数据则不会。 – Michelle 2012-01-17 04:09:52

+1

这真的应该是一个不同的问题。只需'var_dump($ page)'来验证它实际上是一个html字符串。坦率地说,你应该使用'$ dom-> loadHTMLFile($ theurl)' – 2012-01-17 04:22:27