php:从网页中提取特定标签之间的文本
可能重复:
用PHP解析HTML的最佳方法
我知道我应该使用像PHP domdocument(http://docs.php.net/manual/en/domdocument.loadhtml.php)或tagsoup这样的html解析器。
如何使用php domdocument提取特定标签之间的文本,例如在h1,h2,h3,p,table之间获取文本? 看来我只能使用getelementbytagname为一个标签执行此操作。
是否有更好的html解析器用于这样的任务? 或者我将如何循环访问php domdocument?
你是正确的,使用DomDocument(因为正则表达式不是解析HTML的好主意,为什么?请看这里和这里为什么)。
getElementsByTagName
为您提供了一个DOMNodeList,您可以迭代该DOMNodeList以获取所有找到的元素的文本。 所以,你的代码可能看起来像这样:
$document = new DOMDocument();
$document->loadHTML($html);
$tags = array ('h1', 'h2', 'h3', 'h4', 'p');
$texts = array ();
foreach($tags as $tag)
{
$elementList = $document->getElementsByTagName($tag);
foreach($elementList as $element)
{
$texts[$element->tagName][] = $element->textContent;
}
}
return $texts;
请注意,您应该可能在其中有一些错误处理,并且您也将丢失文本的上下文,但您可以根据需要编辑此代码。
你可以用正则表达式来完成。
preg_match_all('#<h1>([^<]*)</h1>#Usi', $html_string, $matches);
foreach ($matches as $match)
{
// do something with $match
}
我不确定你的源代码是什么,所以我添加了一个函数来通过URL获取内容。
$file = file_get_contents($url);
$doc = new DOMDocument();
$doc->loadHTML($file);
$body = $doc->getElementsByTagName('body');
$h1 = $body->getElementsByTagName('h1');
我不确定这部分:
for ($i = 0; $i < $items->length; $i++) {
echo $items->item($i)->nodeValue . "n";
}
要么:
foreach ($items as $item) {
echo $item->nodeValue . "n";
}
以下是关于nodeValue的更多信息:http://docs.php.net/manual/en/function.domnode-node-value.php
希望能帮助到你!
链接地址: http://www.djcxy.com/p/29911.html上一篇: php: Extract text between specific tags from a webpage
下一篇: Get a specific content block of element using URL in PHP