我正在制作网络刮刀,这让我发疯了!
我需要获取段落的文本。简单吧?!这是代码。
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//div");
for ($i = 0; $i < $hrefs->length; $i++) {
$href = $hrefs->item($i);
$url = $href->getAttribute('class');
echo "<br />Found it: $url";
}
它完美地工作,抓住页面上每个div的类并回应它。但我真正需要做的是找到所有<p>
标签 - 页面上的每一个标签 - 并回显<p>
之间的文本!我觉得这很简单,但我无法理解。
修改
所需要的只是以下内容:
$doc = new DOMDocument();
@$doc->loadHTML($html);
$node = $doc->getElementsByTagName('p')->item(3);
echo $node->textContent."\n";
你真正想要的是getElementsByName,然后一旦你拥有了节点,你就可以获得win的textContent。谢谢大家!不确定它是否适用于其他人的情况,但它肯定是我的。 = O
答案 0 :(得分:4)
使用 getElementsByTagName 检索所有<p>
- 元素。然后迭代生成的DOMNodeList,获取项目的 nodeValue 。
<?php
$dom=new DOMDocument;
$dom->loadXML('<html><body><p>para1<p>para2<p>para3</p></p></p></body></html>');
$paras=$dom->getElementsByTagName('p');
for($p=0;$p<$paras->length;++$p)
{
echo htmlentities($paras->item($p)->nodeValue).'<hr/>';
}
?>
答案 1 :(得分:-1)
这个jQuery代码段可能有所帮助。点击textarea后,它会找到p元素中的所有内容 并将它们加载到textarea中。 / ** BEGIN ** /
(文档)$。就绪(函数(){
$('textarea').click(function(){
var pText = $('p').text();
if($('p').children('a, span, li'))
{
var aText = $('a').text();
var spanText=$('span').text();
var liText= $('li').text();
}
//alert('the value p is ' + pText +''+ spanText+''+liText);
$(this).text(pText+''+ spanText+''+liText);
});
});
/ ** END ** /