使用DOM和XPATH在多个类的html标记之间提取文本

时间:2016-05-10 10:07:44

标签: php html dom xpath

我正在尝试在1个HTML标记之间提取文本,但未能执行此操作:

HTML - 要提取的文字(http://www.alexa.com/siteinfo/google.com

<span class="font-4 box1-r">3,757,209</span>

PHP

$data = frontend::file_get_contents_curl('http://www.alexa.com/siteinfo/'.$domain); // custom function that return the HTML string
$dom = new DOMDocument();
$dom->loadHTML(htmlentities($data));
$xpath = new DOMXpath($dom);
$backlinks = $xpath->query('//span[@class="font-4 box1-r"]/text()');
var_dump($backlinks); // returns null

2 个答案:

答案 0 :(得分:2)

实际问题是htmlentities()转义所有标记分隔符(<>),因此最终加载了一个没有元素和属性的长字符串{{1} }:

DOMDocument()

<强> eval.in demo (problem) eval.in demo (solution)

输出

$data = <<<HTML
<div><span class="font-4 box1-r">3,757,209</span></div>
HTML;
$doc = new DOMDocument();
$doc->loadHTML(htmlentities($data));
echo $doc->saveXML();

答案 1 :(得分:1)

您可以将simplehtmldom库用于此目的(http://simplehtmldom.sourceforge.net/)。并将代码实现为:

require_once 'simplehtmldom/simple_html_dom.php';
$html = file_get_html('http://www.alexa.com/siteinfo/google.com');
echo $html->find('span.box1-r', 0)->plaintext;