使用PHP DOM获取html页面的<h2>值?</h2>

时间:2012-05-09 22:13:23

标签: php

我有一个HTTP(craigslist)链接$link,并将内容放入$linkhtml。在此var中是craigslist页面的HTML代码$link

我需要在<h2></h2>之间提取文字。我可以使用正则表达式,但我如何使用PHP DOM?到目前为止我有这个:

$linkhtml= file_get_contents($link);
$dom = new DOMDocument;
@$dom->loadHTML($linkhtml);

接下来我该怎么办才能将元素<h2>的内容放入var $title

3 个答案:

答案 0 :(得分:4)

如果DOMDocument看起来很难理解/使用你,那么你可以试试PHP Simple HTML DOM Parser,它提供了解析html最简单的方法。

require 'simple_html_dom.php';
$html = '<h1>Header 1</h1><h2>Header 2</h2>';
$dom = new simple_html_dom();
$dom->load( $html );
$title = $dom->find('h2',0)->plaintext; 
echo $title; // outputs: Header 2

答案 1 :(得分:3)

您可以使用此代码:

$linkhtml= file_get_contents($link);

$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($linkhtml); // loads your html
$xpath = new DOMXPath($doc);
$h2text = $xpath->evaluate("string(//h2/text())");
// $h2text is your text between <h2> and </h2>

答案 2 :(得分:1)

您可以使用XPath执行此操作:未经测试,可能包含错误

$linkhtml= file_get_contents($link);
$dom = new DOMDocument;
@$dom->loadHTML($linkhtml);

$xpath = new DOMXpath($dom);

$elements = $xpath->query("/html/body/h2");

if (!is_null($elements)) {
    foreach ($elements as $element) {
        $nodes = $element->childNodes;
        foreach ($nodes as $node) {
            echo $node->nodeValue. "\n";
        }
    }
}