我正在尝试阅读网站的内容,但我有一个问题,我想要获取图像,链接这些元素,但我想得到他们自己的元素而不是元素内容,例如我想得到它:我想得到那个整个元素。
我该怎么做..
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.link.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
$dom = new DOMDocument;
@$dom->loadHTML($output);
$items = $dom->getElementsByTagName('a');
for($i = 0; $i < $items->length; $i++) {
echo $items->item($i)->nodeValue . "<br />";
}
curl_close($ch);;
?>
答案 0 :(得分:1)
您似乎要求提供DOMElement的序列化html ?例如。你想要一个包含<a href="http://example.org">link text</a>
的字符串吗? (请让你的问题更清楚。)
$url = 'http://example.com';
$dom = new DOMDocument();
$dom->loadHTMLFile($url);
$anchors = $dom->getElementsByTagName('a');
foreach ($anchors as $a) {
// Best solution, but only works with PHP >= 5.3.6
$htmlstring = $dom->saveHTML($a);
// Otherwise you need to serialize to XML and then fix the self-closing elements
$htmlstring = saveHTMLFragment($a);
echo $htmlstring, "\n";
}
function saveHTMLFragment(DOMElement $e) {
$selfclosingelements = array('></area>', '></base>', '></basefont>',
'></br>', '></col>', '></frame>', '></hr>', '></img>', '></input>',
'></isindex>', '></link>', '></meta>', '></param>', '></source>',
);
// This is not 100% reliable because it may output namespace declarations.
// But otherwise it is extra-paranoid to work down to at least PHP 5.1
$html = $e->ownerDocument->saveXML($e, LIBXML_NOEMPTYTAG);
// in case any empty elements are expanded, collapse them again:
$html = str_ireplace($selfclosingelements, '>', $html);
return $html;
}
但请注意,您正在做的事情很危险,因为它可能会混合编码。最好将输出作为另一个DOMDocument,并使用importNode()
复制所需的节点。或者,使用XSL样式表。
答案 1 :(得分:0)
我假设您只是复制粘贴了一些示例代码,并且没有费心去了解它是如何工作的......
无论如何,->nodeValue
部分接受元素并返回文本内容(因为元素有一个文本节点子元素 - 如果还有其他内容,我不知道nodeValue
会给出什么)。
所以,只需删除->nodeValue
即可获得元素。