4

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

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

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

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

4

3 回答 3

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
于 2012-05-09T22:21:52.967 回答
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>
于 2012-05-09T22:20:36.353 回答
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";
        }
    }
}
于 2012-05-09T22:16:13.143 回答